2010-07-09 6 views
36

Tengo una situación en la que me gustaría buscar una sola palabra.Rendimiento de '% Query%' similar a la búsqueda de texto completo CONTIENE la consulta

Para ese escenario, ¿qué consulta sería buena desde el punto de vista del rendimiento?

Select Col1, Col2 from Table Where Col1 Like '%Search%' 

o

Select Col1, Col2 from Table Where Col1 CONTAINS(Col1,'Search') 

?

+0

También me gustaría saber: ¿cuál es el rendimiento relativo de una consulta que utiliza 'REGEXP' para el mismo propósito? – JYelton

+1

¿Qué base de datos? Tendrán características de rendimiento completamente diferentes en diferentes bases de datos. – Oded

+0

@Oded: MS-SQL Server y MySQL son los dos que más uso. A los efectos de la pregunta, supongo que SQL Server es de mayor interés. – JYelton

Respuesta

36

La búsqueda de texto completo (usando CONTAINS) será más rápida/más eficiente que usar LIKE con wildcarding. La búsqueda de texto completo (FTS) incluye la capacidad de definir índices de texto completo, que FTS puede usar. No sé por qué no definiría un índice FTS si pretendía usar la funcionalidad ...

LIKE con wildcarding en el lado izquierdo (IE: LIKE '%Search') no puede usar un índice (suponiendo que exista uno para la columna), garantizando una exploración de tabla. No he probado & en comparación, pero regex tiene el mismo escollo. Para aclarar, LIKE '%Search' y LIKE '%Search%' pueden no usan un índice; LIKE 'Search%' puede usar un índice.

+4

En MS SQL Server, se requiere un índice de texto completo para para usar CONTIENE. –

+1

¿Va a ser más rápido que los motores de búsqueda de texto completo ... como Lucene/Solr? Especialmente en el caso de millones de registros. – Krunal

6

Para una base de datos típica, la búsqueda CONTAINS puede ser mucho más rápida si se crea el índice de búsqueda de texto completo apropiado en el campo que se busca. La evaluación del operador LIKE generalmente no utiliza un índice y, por lo tanto, debe leer todos los datos.

-1

Al igual que la búsqueda en Table it self, matará el rendimiento. Es mejor aplicar como buscar en CTE.

+0

intente debajo de la url http://stackoverflow.com/questions/1569002/how-can-i-optimize-refactor-a-tsql-like-clause/32329298#32329298 – Agrawars

Cuestiones relacionadas