2012-05-22 11 views
5

Tengo una pequeña tabla con 500 filas. Esta tabla tiene 10 columnas, incluida una columna varchar (max).Pregunta lenta "Seleccionar" con varchar (max)

Al realizar esta consulta:

SELECT TOP 36 * 
FROM MyTable 
WHERE (Column1 = Value1) 

recupera alrededor de 36 filas en 3 minutos. Las columnas varchar (max) contienen en cada fila 3000 caracteres.

si intento para recuperar sólo una fila inferior:

SELECT TOP 35 * 
FROM MyTable 
WHERE (Column1 = Value1) 

A continuación, la consulta recupera 35 filas en 0 segundos.

En mis estadísticas clientes, bytes recibidos desde el servidor, que tengo:

95 292 para la consulta que recupera los datos en 0 seg

más de 200 000 000 para la consulta que recupera los datos en 3 minutos

¿Sabes de dónde viene?

EDITAR --- Aquí está mi verdadero código:

select top 36 * 
from Snapshots 
where ExamId = 212 

select top 35 * 
from Snapshots 
where ExamId = 212 

EDITAR --- Más información sobre estadísticas de clientes

Las dos estadísticas que tienen una gran variación son:

bytes recibidos desde servidor: 66 038 Vs Más de 2 000 000

Paquetes TDS recibidos del servidor 30 Vs 11000

+0

No, pero recomendaría cambiar el campo 'varchar' a un campo' text' y ver si eso resuelve el problema de rendimiento. – Emmanuel

+8

['text' ha * long * obsoleto] (http://msdn.microsoft.com/en-us/library/ms187993.aspx) - ¿por qué lo recomendaría? –

+0

Quizás es un problema de memoria o un problema de cambio de disco? – Toc

Respuesta

0

Utilice Index para ExamId utilice también select field1,field2,etc en lugar de select * ....

+0

Lo intenté. No cambia nada – Toc

0

no estoy seguro, pero intente esto:

seleccionar * de instantáneas donde ExamId = (SELECT TOP 36 ExamId de las instantáneas donde ExamId = 212)

+0

Probé (y sustituí "=" por "en") y no cambia nada – Toc

0

¿Qué hay de tratar el top 50, luego, arriba 75, luego 100 principales, para ver si hay un aumento mayor de nuevo, porque parece que solo esta fila, o tal vez solo filas específicas en su tabla.

+0

Sí, cuando aumente la parte superior, aumentará el tiempo de respuesta, Bytes recibidos del servidor y paquetes TDS recibidos de servidor. – Toc

+0

con una diferencia tan grande como pasar de 35 a 36? ¿O son solo las filas específicas en su mesa las que dan un gran salto? –

+0

sin rendimiento es casi el mismo entre los primeros 36 y los mejores 50. Creo que puede ser un problema de tamaño de paquete o algo así? – Toc

Cuestiones relacionadas