Heim  >  Artikel  >  Datenbank  >  So implementieren Sie eine Paging-Abfrage in MySQL

So implementieren Sie eine Paging-Abfrage in MySQL

coldplay.xixi
coldplay.xixiOriginal
2020-10-23 09:23:524917Durchsuche

MySQL-Paging-Abfragemethode: 1. Verwenden Sie bestimmte Felder anstelle von [*] 3. Verwenden Sie [zwischen ... und], die ID muss kontinuierlich erhöht werden Eintrag auf der vorherigen Seite.

So implementieren Sie eine Paging-Abfrage in MySQL

Mysql-Paging-Abfragemethode:

Kurze Beschreibung

  • Seitenabfragen werden normalerweise in MySQL durch Limit #{limit}, #{offset} durchgeführt.

  • Wenn die Tabelle viele Datensätze enthält und die Anzahl der Seiten (#{limit}) groß ist, wird die Effizienz der Paging-Abfrage langsamer.

  • Der Grund für die Verlangsamung liegt darin, dass bei der Seitenabfrage zuerst die Limit- und Offset-Datensätze abgefragt werden und dann die nachfolgenden Offset-Datensätze abgefangen werden.

  • In diesem Artikel wird die tatsächliche 140-Millionen-Tabelle big_table als Beispiel verwendet, um aufzuzeichnen, wie Paging-Abfragen optimiert werden.

Testanleitung

  • Testtabelle: big_table, Datenvolumen: 140 Millionen.

Original SQL (4500 ms)

-- 原始分页查询,耗时:4500ms
select * 
from big_table
limit 2000000,10;

Gründe für die Langsamkeit:

1. Die Abfragebedingung ist *

2. Limit = 2000000 ist zu groß

Optimierung 1 (empfohlen): Verwenden Sie bestimmte Felder anstelle von * (1600ms)

-- 用明确字段代替*,耗时:1600ms
select id,uid,media_id,media_name,news_id,comment 
from big_table
limit 2000000,10;

Optimierung 2: Zuerst den Index durchsuchen (450ms)

-- 方法1:先对索引进行分页查询,耗时:450ms
select * from big_table AS h inner join
 (select id from big_table
  limit 2000000,10) AS ss 
 on h.id = ss.id;
-- 方法2:先查询出起始位置的索引,耗时:450ms
select * from big_table
where id > (
select id from big_table limit 2000000,1
)
limit 10;

Optimierung 3: zwischen … und (5ms)

Einschränkung: ID muss kontinuierlich steigend sein.

-- 上一页保留最后一条记录所在id,耗时:5ms
select * from big_table
where id between 4882489 and 4882489 + 10 ;

Optimierung 4 (empfohlen): Behalten Sie die ID des Datensatzes auf der vorherigen Seite bei (5 ms)

Einschränkungen: Sie müssen die ID des letzten Datensatzes auf der vorherigen Seite beibehalten

-- 上一页需要保留最后一条记录所在id,耗时:5ms
select * from big_table
where id > 4882488
limit 10;

Weitere verwandte Themen kostenlos Lernempfehlungen: MySQL-Tutorial(Video)

Das obige ist der detaillierte Inhalt vonSo implementieren Sie eine Paging-Abfrage in MySQL. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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