Réponses:
Les deux formes de syntaxe sont un peu déroutantes car elles inversent les nombres:
LIMIT <skip>, <count>
Est équivalent à:
LIMIT <count> OFFSET <skip>
Il est compatible avec la syntaxe de MySQL et PostgreSQL. MySQL prend en charge les deux formes de syntaxe, et ses documents affirment que la seconde syntaxe avec OFFSET était destinée à assurer la compatibilité avec PostgreSQL. Les documents PostgreSQL montrent qu'il ne prend en charge que la deuxième syntaxe, et les documents de SQLite montrent qu'il prend en charge les deux, recommandant la deuxième syntaxe pour éviter toute confusion.
Soit dit en passant, utiliser LIMIT sans utiliser ORDER BY au préalable ne vous donnera pas toujours les résultats souhaités. En pratique, SQLite retournera les lignes dans un certain ordre, probablement déterminé par la manière dont elles sont physiquement stockées dans le fichier. Mais cela ne signifie pas nécessairement que c'est dans l'ordre que vous souhaitez. La seule façon d'obtenir un ordre prévisible est d'utiliser ORDER BY explicitement.
LIMIT <count> OFFSET <skip>
est plus clair. Je vous remercie.
Ce dernier est une syntaxe alternative avec une mise en garde :
Si une virgule est utilisée à la place du mot clé OFFSET, alors le décalage est le premier nombre et la limite est le deuxième nombre. Cette contradiction apparente est intentionnelle - elle maximise la compatibilité avec les systèmes de base de données SQL hérités.
J'ai fait quelques tests et il n'y a pas de différence de performances.
C'est uniquement pour la compatibilité avec d'autres langages SQL.
La durée de fonctionnement des deux versions est la même.
J'ai créé 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 pendant 0,001 seconde