2010-07-01 15 views
11

En SQL Server (2008), tengo un índice de texto completo en dos columnas, llámalas Table1.FirstNames y Table2.LastNames. Después de perfilar algunas consultas, se me ocurrió con los siguientes resultados:¿Por qué las consultas SQL FullText se ralentizan cuando O?

SELECT * 
FROM (Table1 LEFT JOIN Table2 ON Table1.SomeKey=Table2.SomeKey) 
WHERE CONTAINS(FirstNames, 'Bob') OR CONTAINS(LastNames, 'Bob') 

=> 31 197ms

SELECT * 
FROM (Table1 LEFT JOIN Table2 ON Table1.SomeKey=Table2.SomeKey) 
WHERE (FirstNames LIKE '%Bob%') OR CONTAINS(LastNames, 'Bob') 

=> 1941ms

SELECT * 
FROM (Table1 LEFT JOIN Table2 ON Table1.SomeKey=Table2.SomeKey) 
WHERE CONTAINS(FirstNames, 'Bob') OR LastNames LIKE '%Bob%' 

=> 3201ms

SELECT * 
FROM (Table1 LEFT JOIN Table2 ON Table1.SomeKey=Table2.SomeKey) 
WHERE CONTAINS(FirstNames, 'Bob') 

=> 565ms

SELECT * 
FROM (Table1 LEFT JOIN Table2 ON Table1.SomeKey=Table2.SomeKey) 
WHERE FirstNames LIKE '%Bob%' 

=> 670ms

SELECT * 
FROM (Table1 LEFT JOIN Table2 ON Table1.SomeKey=Table2.SomeKey) 
WHERE CONTAINS(LastNames, 'Bob') 

=> 17ms

SELECT * 
FROM (Table1 LEFT JOIN Table2 ON Table1.SomeKey=Table2.SomeKey) 
WHERE LastNames LIKE '%Bob%' 

=> 3 ms

Este comportamiento persiste incluso si reconstruir el índice de texto completo.

FullText suele ser mucho más rápido que una consulta LIKE sobre grandes conjuntos de datos en un idioma específico, pero ¿por qué las velocidades de consulta se ralentizan en un orden de magnitud cuando OR o dos clases de FullText?

+0

¿Qué tan bien 'DONDE FirstNames Como '% Bob% 'O LastNames ¿Te gusta el trabajo'% Bob% ''? –

+0

Aproximadamente 2 segundos (estoy trabajando con él en esto) – tghw

Respuesta

0

Echaré un vistazo al plan de ejecución para cada uno de esos. Supongo que aprenderás un poco de eso.

Here is a decent link que le mostrará cómo mostrar el plan de ejecución, así como algunos consejos para interpretarlo.

Cuestiones relacionadas