Uso de límite en Mysql: cuando usamos declaraciones de consulta, a menudo necesitamos devolver las primeras filas de datos o las del medio. ¿Qué debemos hacer en este momento? No se preocupe, mysql ya nos proporciona dicha función.
SELECCIONAR * DE la tabla LIMIT [desplazamiento,] filas desplazamiento de filas |
La cláusula LIMIT se puede utilizar para forzar que una instrucción SELECT devuelva un número específico de registros. LIMIT acepta uno o dos argumentos numéricos. El parámetro debe ser una constante entera. Si se proporcionan dos parámetros, el primer parámetro especifica el desplazamiento de la primera fila de registro devuelta y el segundo parámetro especifica el número máximo de filas de registro devueltas. El desplazamiento de la fila del registro inicial es 0 (en lugar de 1): para compatibilidad con PostgreSQL, MySQL también admite la sintaxis: LIMIT # OFFSET #.
mysql> SELECT * FROM table LIMIT 5,10 // Recuperar las filas del registro 6-15;
//Para recuperar todas las filas de registros desde un determinado desplazamiento hasta el final del conjunto de registros, puede especificar -1 como segundo parámetro:
mysql> SELECT * FROM table LIMIT 95,-1; // Recuperar la fila del registro 96-última.
//Si solo se proporciona un parámetro, significa devolver el número máximo de filas de registros:
mysql> SELECT * FROM table LIMIT 5; //Recupera las primeras 5 filas de registros.
//En otras palabras, LIMIT n es equivalente a LIMIT 0,n.
Tenga en cuenta la diferencia entre el límite 10 y el límite 9,1:
Por ejemplo:
1.
Seleccione * De la ciclopedia Donde ID>=(
Seleccione Máx.(ID) de (
Seleccionar ID de la ciclopedia Ordenar por límite de ID 90001
)Como tmp
) límite 100;
2.
Seleccione * De la ciclopedia Donde ID>=(
Seleccione Máx.(ID) de (
Seleccionar ID de la ciclopedia Ordenar por límite de ID 90000,1
)Como tmp
) límite 100;
De manera similar, si obtenemos los siguientes 100 registros después de 90.000, ¿cuál es más rápido, la primera oración o la segunda?
La primera oración es tomar primero los primeros 90001 registros, tomar el valor de ID más grande como identificador inicial y luego usarlo para ubicar rápidamente los siguientes 100 registros. La segunda oración es tomar solo los últimos 90000 registros y luego tomar los últimos 90000 registros. Valor de ID. Utilice la marca inicial para ubicar la primera oración de 100 registros y ejecute el resultado en 100 filas en un conjunto (0,23) segundos.
Resultado de la ejecución de la oración 2.100 filas en el conjunto (0.19) seg.
De hecho, la segunda frase se puede simplificar a:
Seleccione * De la ciclopedia Donde ID>=(
Seleccione ID del límite de ciclopedia 90000,1
)límite 100;
Utilice directamente la ID del registro número 90.000 sin pasar por la operación Max. Esto debería ser más eficiente en teoría, pero en el uso real el efecto es casi invisible, porque la ID de posicionamiento devuelve solo 1 registro y Max casi no necesita hacerlo. ejecutarse Puede obtener el resultado, pero escribirlo de esta manera es cada vez más claro, eliminando la necesidad de dibujar una serpiente.
Seleccione Top 100 * De la ciclopedia Donde ID>=(
Seleccione Top 90001 Max(ID) de (
Seleccionar ID de la ciclopedia Ordenar por ID
)Como tmp
)
Pero no importa si se implementa en un procedimiento almacenado o directamente en el código, el cuello de botella siempre es que el TOP de MS-SQL siempre devuelve los primeros N registros. Esta situación no se siente profundamente cuando la cantidad de datos no es grande, pero si. hay cientos o miles de 10,000, la eficiencia definitivamente será baja. En comparación, el límite de MySQL tiene muchas ventajas.
,implementar:
Seleccione ID del límite de ciclopedia 90000
Seleccione ID del límite de ciclopedia 90000,1
Los resultados son:
90000 filas en conjunto (0,36) segundos
1 fila en conjunto (0,06) segundos
MS-SQL solo puede usar Select Top 90000 ID de la ciclopedia. El tiempo de ejecución es de 390 ms y el tiempo de ejecución de la misma operación no es tan bueno como los 360 ms de MySQL.
El desplazamiento del límite se usa cuando hay más registros. Cuando hay menos registros, el desplazamiento es menor, por lo que es mejor usar el límite directamente. Cuanto mayor sea la compensación, mejor será este último.
////////////////////////////////////////////////// /// //////////////////////////
1. Cuando el desplazamiento es relativamente pequeño.
seleccione * de yanxue8_visit limit 10,10
Ejecute varias veces, el tiempo permanece entre 0,0004 y 0,0005
Seleccione * De yanxue8_visit Donde vid >=(
Seleccionar video de yanxue8_visit Ordenar por límite de video 10,1
) límite 10
Ejecute varias veces, el tiempo permanece entre 0,0005 y 0,0006, principalmente 0,0006
Conclusión: cuando el desplazamiento es pequeño, es mejor utilizar el límite directamente. Esta visualización se debe a la subconsulta.
2. Cuando el desplazamiento es grande.
seleccione * de yanxue8_visit limit 10000,10
Ejecute varias veces, el tiempo permanece alrededor de 0,0187
Seleccione * De yanxue8_visit Donde vid >=(
Seleccionar video de yanxue8_visit Ordenar por límite de video 10000,1
) límite 10
Después de varias ejecuciones, el tiempo se mantiene en torno a 0,0061, que es sólo 1/3 del anterior. Cuanto mayor sea el desplazamiento preestablecido, mejor será este último.
////////////////////////////////////////////////// /// //////////////////////////////////////////////// /
mysql> SELECT * FROM table LIMIT 95,-1; // Recuperar la fila del registro 96-última.
//Si solo se proporciona un parámetro, significa devolver el número máximo de filas de registro
Este artículo proviene del blog de CSDN. Indique la fuente al reimprimir: http://blog.csdn.net/zhqingyun163/archive/2009/12/22/5053579.aspx.