ver utf8 inner full ejemplos sql-server performance optimization indexing

sql-server - utf8 - sql server collation names



¿Qué es una búsqueda de marcadores en el servidor SQL? (3)

De MSDN respecto a las búsquedas de marcadores:

El operador de búsqueda de marcadores utiliza un marcador (ID de fila o clave de agrupación) para buscar la fila correspondiente en la tabla o índice agrupado. La columna Argumento contiene la etiqueta de marcador utilizada para buscar la fila en la tabla o índice agrupado. La columna Argumento también contiene el nombre de la tabla o índice agrupado en el que se busca la fila. Si la cláusula WITH PREFETCH aparece en la columna Argumento, el procesador de consultas ha determinado que es óptimo utilizar la captación previa asíncrona (lectura anticipada) al buscar marcadores en la tabla o índice agrupado.

Estoy en el proceso de tratar de optimizar una consulta que busca datos históricos. Estoy usando el analizador de consultas para buscar el plan de ejecución y he encontrado que la mayoría de los costos de mis consultas se encuentran en algo llamado "Búsqueda de marcadores". Nunca he visto este nodo en un plan de ejecución y no sé lo que significa.

¿Es esto algo bueno o malo en una consulta?


Una búsqueda de marcadores es el proceso de encontrar los datos reales en la tabla SQL, en base a una entrada que se encuentra en un índice no agrupado.

Cuando busca un valor en un índice no agrupado, y su consulta necesita más campos que los que forman parte del nodo de hoja de índice (todos los campos de índice, más cualquier posible columna INCLUDE), entonces SQL Server necesita ir a recuperar los datos reales página (s) - eso es lo que se llama una búsqueda de marcadores.

En algunos casos, esa es realmente la única forma de proceder: solo si su consulta requiere solo un campo más (no un montón de ellos), podría ser una buena idea INCLUIR ese campo en el índice no agrupado. En ese caso, el nodo a nivel de hoja del índice no agrupado contendría todos los campos necesarios para satisfacer su consulta (un índice de "cobertura") y, por lo tanto, ya no sería necesaria una búsqueda de marcadores.

Bagazo


Es un NESTED LOOP que une un índice no agrupado con la tabla en un puntero de fila.

Sucede para las consultas como esta:

SELECT col1 FROM table WHERE col2 BETWEEN 1 AND 10

, si tienes un índice en col2 .

El índice en col2 contiene punteros a las filas indexadas.

Entonces, para recuperar el valor de col1 , el motor necesita escanear el índice en col2 para los valores clave de 1 a 10 , y para cada hoja de índice, consulte la tabla utilizando el puntero contenido en la hoja, para encontrar el valor de col1 .

Este artículo señala que una Bookmark Lookup es un término de SQL Server 2000 , que se sustituye por NESTED LOOP entre el índice y la tabla en SQL Server 2005 y superiores