Ich habe eine Datenbank „Algebra“ mit einer Tabelle „Fragen“ mit 1.033.990 Zeilen. Die Datensätze haben ein Attribut „gelöst“, das INT ist. Ich habe eine einfache Abfrage
select count(*) from questions where solved = 0
Ich habe zwei Server mit ähnlichen CPUs. Auf beiden Servern sind die Tabellen gleich. (Die Datenbank ist eine Replik der Produktion). Sie befinden sich auf SSDs. Ein Server hat Ubuntu 14.04 mit MySQL 5.5.49 und ein anderer Server hat Ubuntu 16.04 mit MySQL 5.7.12.
Das Problem besteht darin, dass diese Abfrage bei MySQL 5.5 nur 0,009 s dauert, bei MySQL 5.7 jedoch 0,304 s. Das ist 34-mal LANGSAMER!!!
Die Abfragepläne sind ungefähr ähnlich:
Langsamer Server:
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
1 SIMPLE questions NULL index NULL by_topic_solved 97 NULL 1033990 10.00 Using where; Using index
Schneller Server:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE questions index NULL by_topic_solved 97 NULL 1033989 Using where; Using index
Warum das so sein könnte, ist mir ein Rätsel. Ich habe bei diesem neuen 5.7-Setup andere, kompliziertere Leistungsprobleme gesehen, aber dies ist das einfachste Problem, das man in Bezug auf die zugrunde liegende Abfrage angehen muss.
Ich versuche, die Erklärung dafür zu finden oder wo ich anfangen soll. my.cnf war bei beiden ziemlich ähnlich. Für Vorschläge bin ich dankbar.
Antwort1
Ich habe dieses Problem vollständig verstanden. Was sich geändert hat, ist, dass im neuen MySQL der Abfragecache aufgrund der Standardeinstellung query_cache_type = OFF deaktiviert ist. Als ich den Abfragecache durch Festlegen von query_cache_type=1 wieder aktiviert habe, war die Leistung sofort wieder besser. Da meine Site 100-mal mehr SELECT-Abfragen als INSERT/UPDATE-Abfragen verwendet, ist die Verwendung des Abfragecaches für mich sinnvoll. Danke, dass Sie mich darauf hingewiesen haben!