En primer lugar, ¿por qué DBCC DROPCLEANBUFFERS;
? Este es un reinicio frío intenso del grupo de búferes. A menos que quiera medir y ajustar el rendimiento IO de su disco duro, a nadie le importa el rendimiento de un caché frío. Esto es no cómo funcionará su sistema. El almacenamiento en memoria caché de páginas en el grupo de búferes es el aspecto de rendimiento más crítico de en las bases de datos, y usted lo elimina. Es como aparecer en un Ferrari sin el motor y preguntar por qué es tan lento. Para mediciones de rendimiento debe hacer exactamente el opuesto a: ejecute la consulta 4-5 veces para calentar el caché, luego mida.
En segundo lugar, ¿cuál es la estructura de su mesa? ¿Es la tabla Account.Customer
índice de clúster de tabla ordenar por Record_id
? Si no, nunca obtendrás el rendimiento que deseas, no importa cómo expreses tu T-SQL.
Y por último pero no menos importante, ¿qué sistema tiene? ¿Tiene suficiente memoria RAM para almacenar en caché toda la base de datos en la memoria? Si no, compra más RAM. ¿Existen otros procesos que compitan por la memoria, como IIS/Asp? En caso afirmativo, expúlselos a su propio servidor, debe n ever ever run the database on the same host as the web server si el rendimiento es importante.
Para una rápida localización alternativa de considerar soluciones impulsadas conjunto de claves:
solución
/* moving up */
SELECT top(@Page_Size) *
FROM Account.Customer
WHERE Record_Id > @lastPageRecordId
ORDER BY Record_Id;
/* moving down */
SELECT top(@Page_Size) *
FROM Account.Customer
WHERE Record_Id < @firstPageRecordId
ORDER BY Record_Id DESC;
Un conjunto de claves impulsado puede solicitar directamente a la última posición y luego oscilar escanea la página siguiente/anterior, utilizando la posición clave del índice agrupado. La lógica de búsqueda (estado) debe recordar las últimas y primeras teclas de la página que se muestra para continuar desde allí, en lugar de recordar el número de página.
Las soluciones basadas en Rowcount (así como LIMIT en MySQL) son menos eficientes que las basadas en conjuntos de claves porque siempre deben contar los registros para posicionarse, en lugar de buscar directamente la posición como lo hacen los conjuntos de claves.
¿qué dice el plan de ejecución? – super9
¿Qué índices tienes? ¿Puedes publicar el script de crear tabla? –
Relacionado: http://stackoverflow.com/questions/1897436/row-number-over-not-fast-enough-with-large-result-set-any-good-solution –