¿Cuál de las siguientes consultas es más rápida (LIKE vs CONTAINS)?
SELECT * FROM table WHERE Column LIKE '%test%';
o
SELECT * FROM table WHERE Contains(Column, "test");
La segunda (suponiendo que te refieras a CONTAINS
, y lo pongas en una consulta válida) debería ser más rápida, porque puede utilizar alguna forma de índice (en este caso, un índice de texto completo). Por supuesto, esta forma de consulta sólo está disponible si la columna está en un índice de texto completo. Si no lo está, sólo está disponible la primera forma.
La primera consulta, utilizando LIKE, no podrá utilizar un índice, ya que comienza con un comodín, por lo que siempre requerirá un escaneo de la tabla completa.
La consulta CONTAINS
debería ser:
SELECT * FROM table WHERE CONTAINS(Column, 'test');
Habiendo ejecutado ambas consultas en una instancia de SQL Server 2012, puedo confirmar que la primera consulta fue la más rápida en mi caso.
La consulta con la palabra clave LIKE
mostró un escaneo de índice agrupado.
La consulta con la palabra clave CONTAINS
también tenía un escaneo de índice agrupado con operadores adicionales para la coincidencia de texto completo y un merge join.
Plan]1
Creo que CONTAINS
tardó más y utilizó Merge
porque tenías un guión("-") en tu consulta adventure-works.com
.
El guión es una palabra de ruptura por lo que el CONTAINS
buscó en el índice de texto completo para adventure
y luego buscó para works.com
y fusionó los resultados.