Marque como respuesta si ha despejado sus dudas como mencionó en los comentarios.
Mubashar
Respuestas:
270
Las dos formas de sintaxis son un poco confusas porque invierten los números:
LIMIT <skip>,<count>
Es equivalente a:
LIMIT <count> OFFSET <skip>
Es compatible con la sintaxis de MySQL y PostgreSQL. MySQL admite ambas formas de sintaxis, y sus documentos afirman que la segunda sintaxis con OFFSET estaba destinada a proporcionar compatibilidad con PostgreSQL. Los documentos de PostgreSQL muestran que solo admite la segunda sintaxis, y los documentos de SQLite muestran que admite ambos, recomendando la segunda sintaxis para evitar confusiones.
Por cierto, usar LIMIT sin usar ORDER BY no siempre puede darte los resultados que deseas. En la práctica, SQLite devolverá las filas en algún orden, probablemente determinado por cómo se almacenan físicamente en el archivo. Pero esto no significa necesariamente que esté en el orden que desea. La única forma de obtener un orden predecible es usar ORDER BY explícitamente.
Esta respuesta similar tiene una buena solución con buen rendimiento si el orden de las filas es importante. stackoverflow.com/a/28860492/5016333
Rodrigo V
23
La última es una sintaxis alternativa con una advertencia :
Si se usa una coma en lugar de la palabra clave OFFSET, el desplazamiento es el primer número y el límite es el segundo número. Esta aparente contradicción es intencional: maximiza la compatibilidad con los sistemas de bases de datos SQL heredados.
Hice algunas pruebas y no hay diferencia en el rendimiento.
Eso es solo para compatibilidad con otros lenguajes sql.
El tiempo de ejecución de ambas versiones es el mismo.
Hice sqlite db con table1 con 100000 filas. Corro la próxima prueba
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)+"");}
Respuestas:
Las dos formas de sintaxis son un poco confusas porque invierten los números:
Es equivalente a:
Es compatible con la sintaxis de MySQL y PostgreSQL. MySQL admite ambas formas de sintaxis, y sus documentos afirman que la segunda sintaxis con OFFSET estaba destinada a proporcionar compatibilidad con PostgreSQL. Los documentos de PostgreSQL muestran que solo admite la segunda sintaxis, y los documentos de SQLite muestran que admite ambos, recomendando la segunda sintaxis para evitar confusiones.
Por cierto, usar LIMIT sin usar ORDER BY no siempre puede darte los resultados que deseas. En la práctica, SQLite devolverá las filas en algún orden, probablemente determinado por cómo se almacenan físicamente en el archivo. Pero esto no significa necesariamente que esté en el orden que desea. La única forma de obtener un orden predecible es usar ORDER BY explícitamente.
fuente
LIMIT <count> OFFSET <skip>
Es más claro. Gracias.La última es una sintaxis alternativa con una advertencia :
fuente
Hice algunas pruebas y no hay diferencia en el rendimiento.
Eso es solo para compatibilidad con otros lenguajes sql.
El tiempo de ejecución de ambas versiones es el mismo.
Hice sqlite db con table1 con 100000 filas. Corro la próxima prueba
Los tiempos varían por 0.001 de segundo
fuente