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?
¿Qué tan bien 'DONDE FirstNames Como '% Bob% 'O LastNames ¿Te gusta el trabajo'% Bob% ''? –
Aproximadamente 2 segundos (estoy trabajando con él en esto) – tghw