Heim  >  Artikel  >  Datenbank  >  Vorsichtsmaßnahmen für bedingte MySQL-Abfragen und Paging-Abfragen unter Millionen von Daten

Vorsichtsmaßnahmen für bedingte MySQL-Abfragen und Paging-Abfragen unter Millionen von Daten

藏色散人
藏色散人nach vorne
2019-04-17 17:53:083637Durchsuche

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:hcoder.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen