2008-10-09 31 views
14

Así que para este proyecto, tenemos un montón de consultas que se ejecuta sobre una base regular (cada minuto o así. He utilizado el "Analizar consulta en Motor de base" para comprobar en ellos.Estadísticas de SQL Server

ellos son bastante simples:. seleccionar * de tablex donde = procesados ​​'0'

hay un índice de procesado, y cada consulta debe devolver < 1000 filas en una tabla con los registros 1MM

El analizador recomienda crear algunas ESTADÍSTICAS sobre esto .... Entonces mi pregunta es: ¿Cuáles son esas estadísticas? ¿Realmente ayudan? actuación ? ¿Qué tan costosos son para una mesa como la de arriba?

Tenga en cuenta que de ninguna manera me llamaría un usuario experimentado de SQL Server ... Y esta es la primera vez que usa este Analizador.

Respuesta

24

Las estadísticas son lo que SQL Server usa para determinar la viabilidad de cómo obtener datos.

Digamos, por ejemplo, que tiene una tabla que solo tiene un índice agrupado en la clave principal. Cuando ejecuta SELECT * FROM tablename WHERE col1=value, SQL Server solo tiene una opción, para escanear cada fila en la tabla para encontrar las filas correspondientes.

Ahora agregamos un índice en col1, por lo que supone que SQL Server usará el índice para buscar las filas correspondientes, pero eso no siempre es cierto. Digamos que la tabla tiene 200,000 filas y col1 solo tiene 2 valores: 1 y 0. Cuando SQL Server usa un índice para buscar datos, el índice contiene punteros a la posición del índice agrupado. Dado que solo hay dos valores en la columna indexada, SQL Server decide que tiene más sentido escanear la tabla porque usar el índice sería más trabajo.

Ahora agregaremos otras 800,000 filas de datos a la tabla, pero esta vez los valores en col1 son muy variados. Ahora es un índice útil porque SQL Server puede utilizar el índice de forma viable para limitar lo que necesita sacar de la tabla. ¿Utilizará SQL Server el índice?

Depende. Y de lo que depende son las estadísticas. En algún momento, con AUTO UPDATE STATISTICS activado, el servidor actualizará las estadísticas del índice y sabrá que es un índice válido y muy bueno para usar. Hasta ese momento, sin embargo, ignorará el índice como irrelevante.

Ese es un uso de las estadísticas. Pero hay otro uso y que no está relacionado con los índices. SQL Server mantiene estadísticas básicas sobre todas las columnas en una tabla. Si hay suficientes datos diferentes para que valga la pena, SQL Server realmente creará un índice temporal en una columna y lo usará para filtrar. Si bien esto lleva más tiempo que utilizar un índice existente, lleva menos tiempo que un escaneo de tabla completo.

A veces recibirá recomendaciones para crear estadísticas específicas sobre las columnas que serían útiles para eso. Estos no son índices, pero hacen un seguimiento del muestreo estadístico de datos en la columna para que SQL Server pueda determinar si tiene sentido crear un índice temporal para devolver datos.

HTH

+0

"el servidor actualizará las estadísticas para el índice y sé que es un índice muy buena y válida para usar" - sobre la base de qué? ¿Cuándo se determina que el índice no es válido para su uso? – BornToCode

0

En SQL Server 2005, configure las estadísticas de creación automática y las estadísticas de actualización automática. No tendrá que preocuparse por crearlos o mantenerlos usted mismo, ya que la base de datos maneja esto muy bien.

Cuestiones relacionadas