Méthode de requête de pagination MySQL : 1. Utilisez des champs spécifiques au lieu de [*] ; 2. Recherchez d'abord l'index ; 3. Utilisez [entre ... et], l'identifiant doit être continuellement croissant ; la page précédente L'identifiant où se trouve l'enregistrement.
Méthode de requête de pagination MySQL :
Brève description
Habituellement dans MySQL, limit #{limit}, #{offset} est utilisé pour effectuer des requêtes de pagination.
Lorsqu'il y a de nombreux enregistrements dans la table et que le nombre de pages (#{limit}) est grand, l'efficacité de la requête de pagination devient plus lente.
La raison du ralentissement est que lors de l'interrogation dans les pages, les enregistrements de limite + décalage seront interrogés en premier, puis les enregistrements de décalage suivants seront interceptés.
Cet article prend la table big_table de 140 millions de personnes comme exemple pour enregistrer comment optimiser les requêtes de pagination.
Description du test
Table de test : big_table, volume de données : 140 millions.
SQL original (4500 ms)
-- 原始分页查询,耗时:4500ms select * from big_table limit 2000000,10;
Raisons de la lenteur :
1 La condition de requête est *
2. = 2000000 est trop gros
Optimisation 1 (recommandée) : Remplacer * par des champs spécifiques (1600 ms)
-- 用明确字段代替*,耗时:1600ms select id,uid,media_id,media_name,news_id,comment from big_table limit 2000000,10;
Optimisation 2 : Rechercher d'abord dans l'index (450 ms )
-- 方法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;
Optimisation 3 : entre … et (5ms)
Restriction : l'id doit être en augmentation continue.
-- 上一页保留最后一条记录所在id,耗时:5ms select * from big_table where id between 4882489 and 4882489 + 10 ;
Optimisation 4 (recommandée) : Conserver l'identifiant de l'enregistrement sur la page précédente (5ms)
Limitation : Nécessité de conserver l'identifiant du dernier enregistrement sur la page précédente
-- 上一页需要保留最后一条记录所在id,耗时:5ms select * from big_table where id > 4882488 limit 10;
Plus de recommandations d'apprentissage gratuites associées : tutoriel mysql(vidéo)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!