Utilisation de la limite dans MySQL : lorsque nous utilisons des instructions de requête, nous devons souvent renvoyer les premières lignes de données ou celles du milieu. Que devons-nous faire à ce moment-là ? Ne vous inquiétez pas, mysql nous fournit déjà une telle fonction.
SELECT * FROM table LIMIT [offset,] lignes OFFSET offset
La clause LIMIT peut être utilisée pour forcer une instruction SELECT à renvoyer un nombre spécifié d'enregistrements. LIMIT accepte un ou deux arguments numériques. Le paramètre doit être une constante entière. Si deux paramètres sont donnés, le premier paramètre spécifie le décalage de la première ligne d'enregistrement renvoyée et le deuxième paramètre spécifie le nombre maximum de lignes d'enregistrement renvoyées. Le décalage de la ligne d'enregistrement initiale est 0 (au lieu de 1) : Pour des raisons de compatibilité avec PostgreSQL, MySQL prend également en charge la syntaxe : LIMIT # OFFSET #.
mysql> SELECT * FROM table LIMIT 5,10; // Récupère les lignes d'enregistrement 6 à 15
//Pour récupérer toutes les lignes d'enregistrement depuis un certain décalage jusqu'à la fin du jeu d'enregistrements, vous pouvez spécifier -1 comme deuxième paramètre :
mysql> SELECT * FROM table LIMIT 95,-1; // Récupère la dernière ligne d'enregistrement 96.
//Si un seul paramètre est donné, cela revient à renvoyer le nombre maximum de lignes d'enregistrement :
mysql> SELECT * FROM table LIMIT 5; //Récupère les 5 premières lignes d'enregistrement
//En d'autres termes, LIMIT n équivaut à LIMIT 0,n.
Notez la différence entre la limite 10 et la limite 9,1 :
Par exemple:
1.
Sélectionnez * De la cyclopédie Où ID>=(
Sélectionnez Max(ID) De (
Sélectionnez l'ID dans la cyclopédie Trier par limite d'ID 90001
)Comme tmp
) limite 100 ;
2.
Sélectionnez * De la cyclopédie Où ID>=(
Sélectionnez Max(ID) De (
Sélectionnez l'ID dans la cyclopédie Trier par limite d'ID 90000,1
)Comme tmp
) limite 100 ;
De même, si nous obtenons les 100 enregistrements suivants après 90 000, lequel est le plus rapide, la première phrase ou la deuxième phrase ?
La première phrase consiste à prendre d'abord les 90 001 premiers enregistrements, à prendre la plus grande valeur d'ID comme identifiant de départ, puis à l'utiliser pour localiser rapidement les 100 enregistrements suivants. La deuxième phrase consiste à prendre uniquement les 90 000 derniers enregistrements, puis à prendre les 90 000 derniers enregistrements. Valeur d'ID. Utilisez la marque de départ pour localiser la première phrase de 100 enregistrements et exécuter le résultat 100 lignes dans l'ensemble (0,23) seconde.
Résultat de l'exécution de la phrase 2 100 lignes dans l'ensemble (0,19) s
En fait, la deuxième phrase peut être simplifiée comme suit :
Sélectionnez * De la cyclopédie Où ID>=(
Sélectionnez l'ID à partir de la limite cyclopedia 90000,1
)limite 100 ;
Utiliser directement l'ID du 90 000ème enregistrement sans passer par l'opération Max Cela devrait être plus efficace en théorie, mais en pratique l'effet est quasiment invisible, car l'ID de positionnement ne renvoie qu'un seul enregistrement, et Max n'en a quasiment pas besoin. être exécuté. Vous pouvez obtenir le résultat, mais l'écrire de cette façon est de plus en plus clair, éliminant le besoin de dessiner un serpent.
Sélectionnez Top 100 * De la cyclopédie Où ID>=(
Sélectionnez Top 90001 Max(ID) De (
Sélectionnez l'ID dans la cyclopédie Trier par ID
)Comme tmp
)
Mais peu importe qu'il soit implémenté dans une procédure stockée ou directement dans le code, le goulot d'étranglement est toujours que le TOP de MS-SQL renvoie toujours les N premiers enregistrements. Cette situation n'est pas profondément ressentie lorsque la quantité de données n'est pas importante, mais si. s'il y en a des centaines ou des milliers, l'efficacité sera certainement faible. En comparaison, la limite de MySQL présente de nombreux avantages.
,mettre en œuvre:
Sélectionnez l'ID à partir de la limite de cyclopédie 90 000
Sélectionnez l'ID à partir de la limite cyclopedia 90000,1
Les résultats sont :
90 000 lignes dans un ensemble (0,36) seconde
1 rangée dans la série (0,06) seconde
MS-SQL ne peut utiliser que Select Top 90000 ID From Cyclopedia. Le temps d'exécution est de 390 ms et le temps d'exécution de la même opération n'est pas aussi bon que celui de MySQL de 360 ms.
Le décalage de la limite est utilisé lorsqu'il y a plus d'enregistrements. Lorsqu'il y a moins d'enregistrements, le décalage est plus petit, il est donc préférable d'utiliser la limite directement. Plus le décalage est grand, meilleur est ce dernier.
/////////////////////////////////////////////// /// ////////////////////////
1. Lorsque le décalage est relativement faible.
sélectionnez * dans la limite yanxue8_visit 10,10
Exécutez plusieurs fois, le temps reste compris entre 0,0004 et 0,0005
Sélectionnez * De yanxue8_visit Où vid >=(
Sélectionner la vidéo à partir de yanxue8_visit Commander par limite de vidéo 10,1
) limite 10
Exécuté plusieurs fois, le temps reste compris entre 0,0005 et 0,0006, principalement 0,0006
Conclusion : Lorsque le décalage est faible, il est préférable d'utiliser directement la limite. Cet affichage est dû à la sous-requête.
2. Lorsque le décalage est important.
sélectionnez * dans la limite yanxue8_visit 10000,10
Exécutez plusieurs fois, le temps reste autour de 0,0187
Sélectionnez * De yanxue8_visit Où vid >=(
Sélectionnez la vidéo à partir de yanxue8_visit Commandez par limite de vidéo 10000,1
) limite 10
Après plusieurs exécutions, le temps reste autour de 0,0061, soit seulement 1/3 de l'ancien. Plus le décalage prédéfini est grand, meilleur est ce dernier.
/////////////////////////////////////////////// /// //////////////////////////////////////////// /
mysql> SELECT * FROM table LIMIT 95,-1; // Récupère la dernière ligne d'enregistrement 96.
//Si un seul paramètre est donné, cela revient à renvoyer le nombre maximum de lignes d'enregistrement
Cet article provient du blog CSDN Veuillez indiquer la source lors de la réimpression : http://blog.csdn.net/zhqingyun163/archive/2009/12/22/5053579.aspx.