Heim >Datenbank >MySQL-Tutorial >Vorsichtsmaßnahmen für bedingte MySQL-Abfragen und Paging-Abfragen unter Millionen von Daten
In Fortsetzung des vorherigen Abschnitts „MySQL-Paging-Problem mit Millionen von Daten“ fügen wir die Abfragebedingungen hinzu:
select id from news where cate = 1 order by id desc limit 500000 ,10 查询时间 20 秒
Was für eine erschreckende Geschwindigkeit! ! Nutzen Sie das Wissen aus dem ersten Abschnitt „Millions of Data MySQL Data Test Environment Introduction“ zur Optimierung:
select * from news where cate = 1 and id > (select id from news where cate = 1 order by id desc limit 500000,1 ) order by id desc limit 0,10 查询时间 15 秒
Der Optimierungseffekt ist nicht offensichtlich, die Auswirkungen der Bedingungen jedoch schon immer noch großartig! In diesem Fall können wir das Problem der Betriebseffizienz nicht lösen, egal wie wir die SQL-Anweisung optimieren. Ändern wir also die Idee: Erstellen Sie eine Indextabelle, um nur die ID- und Klassifizierungsinformationen des Artikels aufzuzeichnen. Wir teilen den großen Bereich des Artikelinhalts in separate Teile auf.
表 news2 [ 文章表 引擎 myisam 字符集 utf-8 ] ------------------------------------------------- idint11主键自动增加 cateint11索引
Synchronisieren Sie die beiden Tabellen beim Schreiben von Daten. Für die Abfrage können Sie news2 für die bedingte Abfrage verwenden:
select * from news where cate = 1 and id > (select id from news2 where cate = 1 order by id desc limit 500000,1 ) order by id desc limit 0,10
Beachten Sie, dass die Bedingungs-ID >
Laufzeit 1,23 Sekunden, wir können sehen, dass sich die Laufzeit um fast das 20-fache reduziert! ! Wenn die Datenmenge etwa 100.000 beträgt, kann die Abfragezeit bei etwa 0,5 Sekunden gehalten werden, was einem Wert entspricht, der sich allmählich dem annähert, was wir tolerieren können!
Aber 1 Sekunde ist immer noch ein inakzeptabler Wert für den Server! ! Gibt es noch etwas, das optimiert werden kann? ? Wir haben eine tolle Änderung ausprobiert:
Die Speicher-Engine von news2 wurde auf innodb geändert, und die Ergebnisse waren erstaunlich!
select * from news where cate = 1 and id > (select id from news2 where cate = 1 order by id desc limit 500000,1 ) order by id desc limit 0,10
Nur 0,2 Sekunden, sehr schnell. Warum gibt es so einen großen Unterschied? Eine ausführliche Erläuterung der MySQL-Speicher-Engine finden Sie im nächsten Artikel.
Das obige ist der detaillierte Inhalt vonVorsichtsmaßnahmen für bedingte MySQL-Abfragen und Paging-Abfragen unter Millionen von Daten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!