Heim > Datenbank > MySQL-Tutorial > Hauptteil

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

藏色散人
Freigeben: 2019-04-20 09:18:25
nach vorne
3635 Leute haben es durchsucht

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 秒
Nach dem Login kopieren

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 秒
Nach dem Login kopieren

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索引
Nach dem Login kopieren

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
Nach dem Login kopieren
Nach dem Login kopieren

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
Nach dem Login kopieren
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:hcoder.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage