Im Rahmen meiner Optimierung bin ich nun auf ein seltsames MySQL Verhalten gestoßen, welches ich mir nicht erklären kann. Vielleicht kann das ja einer von euch.
Im genauen habe ich eine Tabelle city_products, welche den Marktbestand aller Produkte in allen Städten beinhaltet. Es gibt einen Index auf die Spalte „product_id“, welche aber laut explain nur manchmal genutzt wird.
Der Tabellenaufbau ist folgender:
CREATE TABLE IF NOT EXISTS `city_products` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `city_id` int(10) unsigned NOT NULL, `product_id` tinyint(4) unsigned NOT NULL, `amount` decimal(10,4) unsigned NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `city_product` (`city_id`,`product_id`), KEY `fk_city_products_cities1` (`city_id`), KEY `fk_city_products_products1` (`product_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
MySQL Abfrage und Ergebnisse
Die Abfrage ist relativ simpel, ich möchte den Bestand von bestimmten Waren in allen Städten haben:
Kontrolliere ich die Abfrageausführung mit Explain, erhalte ich ständig andere Angaben:
Wenn mir dies jemand erklären könnte, wäre dies echt toll.
Daemons im Hintergrund »« Optimierung für den Hintergrund Daemon
4 Kommentare zu “Seltsames MySQL Verhalten”
Für InnoDB Tabellen ist Anzahl rows ein Schätzwert und muss nicht exakt sein. Siehe auch http://dev.mysql.com/doc/refman/5.1/en/explain-output.html
Gruß
Marc
Aber das er dabei unterschiedliche Ausführungspläne erstellt ist nicht das Wahre. Auf was soll man denn dann die Datenbank mit ihren Indizes optimieren, wenn MySQL jedesmal was anders macht?
Du möchtest dir bitte das hier durchlesen: http://bugs.mysql.com/bug.php?id=53761
Danke, das wäre eine Erklärung. Mal sehen was dann nach dem nächsten Upgrade passiert 😉