Maison  >  Article  >  base de données  >  Résumé de la technologie de pagination MySQL

Résumé de la technologie de pagination MySQL

巴扎黑
巴扎黑original
2017-05-01 13:48:091250parcourir

Un ami a demandé : La pagination MySQL semble avoir toujours été un problème. Existe-t-il une méthode d'optimisation ? J'ai vu certaines méthodes de pagination recommandées en ligne, mais elles ne semblent pas réalisables. Pouvez-vous les commenter ?

Méthode 1 : Utiliser directement l'instruction SQL fournie par la base de données

---Style d'instruction : Dans MySQL, la méthode suivante peut être utilisée : SELECT * FROM nom de la table LIMIT M,N.

---Scénarios applicables : convient aux situations où la quantité de données est faible (niveaux de tuples de centaines/milliers).

---Raison/Inconvénient : l'analyse complète de la table sera très lente et certains jeux de résultats de base de données seront instables (par exemple, une fois renvoie 1,2,3 et une autre fois renvoie 2,1,3). Limit restreint N sorties à M positions dans l’ensemble de résultats et ignore le reste.

Méthode 2 : Créer une clé primaire ou un index unique et utiliser l'index (en supposant 10 éléments par page)

---Style d'instruction : Dans MySQL, les méthodes suivantes sont disponibles :

SELECT * FROM nom de la table WHERE id_pk > (pageNum*10) LIMIT M.

---Scénarios applicables : convient aux situations avec de grandes quantités de données (des dizaines de milliers de tuples).

---Raison : L'analyse de l'index sera très rapide. Un ami a suggéré que, comme la requête de données n'est pas triée selon pk_id, il y aura des cas de données manquantes, donc la seule option est la méthode 3.

Méthode 3 : Réorganisation basée sur l'index

---Style d'instruction : dans MySQL, la méthode suivante peut être utilisée : SELECT * FROM table name WHERE id_pk > (pageNum*10) ORDER BY id_pk ASC LIMIT M.

---Adapter aux scénarios : convient aux situations avec une grande quantité de données (des dizaines de milliers de tuples). Il est préférable que l'objet colonne après ORDER BY soit la clé primaire ou unique, afin que l'opération ORDER BY puisse être éliminée. en utilisant l'index mais l'ensemble de résultats est stable (pour la signification de la stabilité, voir méthode 1).

---Raison : l'analyse de l'index sera très rapide. Mais l'opération de tri de MySQL n'a que ASC et pas de DESC (DESC est faux, un vrai DESC sera effectué dans le futur, attendez-le avec impatience).

Méthode 4 : Utiliser la préparation basée sur l'index (le premier point d'interrogation représente pageNum, le second ? représente le nombre de tuples par page)

---Style d'instruction : Dans MySQL, les méthodes suivantes sont disponibles :

PREPARE stmt_name FROM SELECT * FROM nom de la table WHERE id_pk > (?* ?) ORDER BY id_pk

LIMITE ASC M.

--- S'adapter aux scénarios : gros volume de données.

---Raison : l'analyse de l'index sera très rapide. L'instruction de préparation est plus rapide que l'instruction de requête générale.

Méthode 5 : utilisez MySQL pour prendre en charge les opérations ORDER et utilisez des index pour localiser rapidement certains tuples et éviter les analyses de table complètes

---Par exemple : lisez les tuples des lignes 1000 à 1019 (pk est la clé primaire/clé unique).

---SELECT * FROM your_table WHERE pk>=1000 ORDER BY pk ASC LIMIT 0,20.

Méthode 6 : Utilisez « sous-requête/join + index » pour localiser rapidement le tuple, puis lisez le tuple. Le principe est le même que la méthode 5

. ---Par exemple (l'identifiant est la clé primaire/clé unique, variable en police bleue) :

Exemple d'utilisation de sous-requête :

SELECT * FROM your_table WHERE id <=
(SELECT id FROM your_table ORDER
BY id desc LIMIT ($page-1)*$pagesize ORDER BY id desc
LIMIT $pagesize

Exemple de connexion d'utilisation :

SELECT * FROM your_table AS t1
JOIN (SELECT id FROM your_table ORDER BY
id desc LIMIT ($page-1)*$pagesize AS t2
WHERE
t1.id <= t2.id ORDER BY t1.id desc LIMIT $pagesize;

Méthode 7 : Classe de procédure stockée (il est préférable de combiner les méthodes 5/6 ci-dessus)

---Style de déclaration :

ne sera plus donné ---S'adapter aux scénarios : grandes quantités de données La méthode recommandée par l'auteur

---Raison : L'encapsulation de l'opération dans le serveur est relativement plus rapide.

Méthode 8 : Méthode négative

---Quelqu'un sur Internet a écrit sur l'utilisation de SQL_CALC_FOUND_ROWS. Cela n’a aucun sens, ne l’imitez pas.

En gros, il peut être étendu à toutes les bases de données, et le principe est le même. Cependant, la méthode 5 ne peut pas être étendue à d'autres bases de données. Le principe de la promotion est que d'autres bases de données prennent en charge les opérations ORDER BY et peuvent utiliser des index pour effectuer directement le tri.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn