J'ai une question simple avec SQLite. Quelle est la différence entre ceci:
Select * from Animals LIMIT 100 OFFSET 50
et
Select * from Animals LIMIT 100,50
J'ai une question simple avec SQLite. Quelle est la différence entre ceci:
Select * from Animals LIMIT 100 OFFSET 50
et
Select * from Animals LIMIT 100,50
Les deux syntaxes sont un peu confus, car ils inverser les chiffres:
LIMIT <skip>, <count>
Est équivalent à:
LIMIT <count> OFFSET <skip>
Il est compatible avec la syntaxe de MySQL et PostgreSQL. MySQL supporte les deux formes de syntaxe, et de ses docs prétendre que la deuxième syntaxe avec le DÉCALAGE était destinée à assurer la compatibilité avec PostgreSQL. PostgreSQL docs montrer qu'il prend en charge uniquement la deuxième syntaxe.
Par la façon dont, à l'aide de la LIMITE sans d'abord en utilisant ORDER BY ne peut pas toujours vous donner les résultats que vous souhaitez. Dans la pratique, SQLite sera de retour l'rangées dans un certain ordre, probablement déterminée par la façon dont ils sont physiquement stockées dans le fichier. Mais cela ne veut pas nécessairement dire que c'est dans l'ordre que vous voulez. La seule façon d'obtenir un ordre prévisible est d'utiliser la COMMANDE explicitement.
Ce dernier est une syntaxe alternative avec une mise en garde :
Si une virgule est utilisée à la place du mot clé OFFSET, le décalage correspond au premier nombre et la limite au second. Cette contradiction apparente est intentionnelle - elle optimise la compatibilité avec les systèmes de base de données SQL hérités.
J'ai fait des tests et il n'y a pas de différence de performance.
Cela concerne uniquement la compatibilité avec d’autres langues SQL.
Le temps d'exécution des deux versions est identique.
J'ai fait sqlite db avec table1 avec 100000 lignes. Je lance le prochain test
long timeLimitOffset = 0;
long timeLimitComma = 0;
for (int i = 0; i < 100000; i++)
{
//first version
timeLimitOffset += SqlDuraction("Select * from table1 order by col1 LIMIT " + (i + 1) + " OFFSET " + (1001 - i) + "");
// second version
timeLimitComma += SqlDuraction("Select * from table1 order by col1 LIMIT " + (1001 - i) + " , " + (i + 1) + "");
}
Les temps varient pour 0,001 seconde
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.