full sql-server fulltext-index

sql-server - full text search mysql



SQL Server: índice normal vs. índice de texto completo (3)

¿Cuál es exactamente la diferencia (y las ventajas / desventajas) entre un índice de texto completo y un índice regular en una columna varchar? ¿Cuándo usaré qué índice?

Tengo una multitud de columnas varchar (direcciones: nombre de la ciudad, nombre de la calle, etc.) que necesito para poder realizar búsquedas en la forma más eficiente y estoy tratando de averiguar qué tipo de índice usar y por qué.

¡Gracias!


Depende del tipo de búsqueda que quieras hacer. Por ejemplo, no puede usar un índice normal con esta consulta:

SELECT * FROM [MyTable] WHERE [MyColumn] LIKE ''%'' + @SearchText + ''%''

No es sargable . Esto es sargable, pero la selectivity podría no ser muy buena:

SELECT * FROM [MyTable] WHERE [MyColumn] LIKE @SearchText + ''%''

Utiliza un índice de texto completo de manera completamente diferente:

SELECT * FROM [MyTable] WHERE CONTAINS([MyColumn], @SearchText)


Desde la MSDN :

A diferencia de la búsqueda de texto completo, el predicado LIKE Transact-SQL funciona solo en patrones de caracteres. Además, no puede utilizar el predicado LIKE para consultar datos binarios formateados. Además, una consulta LIKE contra una gran cantidad de datos de texto no estructurados es mucho más lenta que una consulta de texto completo equivalente contra los mismos datos.

Una consulta LIKE contra millones de filas de datos de texto puede tardar minutos en volver; mientras que una consulta de texto completo puede tomar solo segundos o menos contra los mismos datos, dependiendo del número de filas que se devuelven.


Por lo general, cuando busca con un índice normal, puede buscar solo en un solo campo, por ejemplo, "buscar todas las ciudades que comiencen con A" o algo así.

El índice de texto completo le permite buscar en múltiples columnas, p. Ej., Buscar al mismo tiempo en la calle, ciudad, provincia, etc. Eso podría ser una ventaja si desea hacer algo como una búsqueda al estilo de Google: solo ingrese un término de búsqueda y encuentre todos filas que tienen ese término de búsqueda en cualquier parte de cualquiera de las columnas varchar.

Además, con una búsqueda regular, estás bastante limitado en lo que puedes hacer (puedes buscar una coincidencia exacta o simplemente, como LIKE).

Con el índice de texto completo, puede buscar formas de palabras (correr, correr, etc.) y también palabras similares especificando su propio tesauro. Puede buscar en varios idiomas si eso es un problema. Puede buscar entradas que tengan dos o más términos que estén "CERCANOS" entre sí.

Bagazo