Qué es mejor: Búsqueda de marcadores / Teclas o Escaneo de índices


Sé que un index seek es mejor que un index scan, pero ¿qué es preferible en SQL Server explain plans: Index seek o Key Lookup (Marcador en SQL Server 2000)?

Por favor dime que no cambiaron el nombre de nuevo para SQL Server 2008...

Author: OMG Ponies, 2009-09-08

3 answers

Búsqueda de índice, cada vez.

Las búsquedas son caras, así que esto cubre índices y especialmente la cláusula INCLUDE fue añadida para mejorarlos.

Decir que si esperas exactamente una fila, por ejemplo, una búsqueda seguida de una búsqueda puede ser mejor que tratar de cubrir una consulta. Confiamos en esto para evitar otro índice en ciertas situaciones.

Edit: Simple talk article: Uso de Índices de Cobertura para Mejorar el Rendimiento de las Consultas

Editar Ago 2012

Las búsquedas suceden por fila por lo que escalan mal. Eventualmente, el optimizador elegirá un análisis de índice agrupado en lugar de una búsqueda+búsqueda porque es más eficiente que muchas búsquedas.

 48
Author: gbn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-08-23 14:21:10

Key lookup es muy similar a una búsqueda de índice agrupada (antes de 2005 SP2 se llamaba 'buscar con búsqueda'). Creo que la única diferencia es que la Búsqueda de claves puede especificar un argumento PRE-FETCH adicional que indique al motor de ejecución que prefetchee más claves en el clúster (es decir. haga una búsqueda de índice agrupada seguida de exploración).

Ver una búsqueda de claves no debería asustarte. Es el operador normal utilizado en Bucles Anidados, y los Bucles Anidados es el operador de unión de ejecución normal. Si si desea mejorar un plan, intente mejorar la unión y vea si puede usar una unión merge en su lugar (es decir. ambos lados de la unión pueden proporcionar filas en el mismo orden de clave, unión más rápida) o una unión hash (tener suficiente memoria para que el QO considere una unión hash, o reducir la cardinalidad filtrando filas antes de la unión en lugar de después).

 9
Author: Remus Rusanu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-09-08 17:53:01

Esta pregunta SO menciona que las búsquedas de claves son algo a evitar. Una búsqueda de índice va a ser definitivamente la operación de mejor rendimiento.

 2
Author: Dustin Venegas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:02:21