2011-05-27 22 views
6

Tengo este named_scope con un LIKE y NOT LIKE en una declaración. ¿Es esto más rápido en términos de ejecución en comparación con el uso de REGEXP?¿Qué es mejor? ¿LIKE o REGEXP de mysql?

named_scope :order_search, :order => "name LIKE '%urgent%' AND name NOT LIKE '%not urgent%' DESC, created_at DESC" 
+1

uso mejor '' RLIKE' o REGEXP' – diEcho

Respuesta

2

En la medida en que yo sepa, de MySQL LIKE utilizará Boyer-Moore en este caso, por lo que podría ser una ligera ventaja para LIKE.

Sin embargo, será insignificante en comparación con el uso de un desencadenador que almacenaría toda la expresión en un campo is_urgent. A continuación, puede agregar un índice en (is_urgent, created_at).

+0

no se dejó a la mayoría de consulta, el índice no funcionará – Neo

+0

Eso dependería de su repartición. Si hay pocos elementos urgentes, el planificador usará el índice. –

+0

no, es filesort, no index sort – Neo

5

Es una diferencia de milisegundos, inadmisible. A menos que esté lidiando con una cantidad extremadamente alta de tráfico, no importará.

Si tiene problemas de rendimiento con su enfoque, es probable que su tabla tenga una gran cantidad de filas. El cuello de la botella no es LIKE entonces (y MySQL también admite REGEXP), sino la estructura de su tabla.

En cualquier caso, debe leer en MySQL Indexes y MySQL Fulltext Search.

1

su consulta no se dejó a la mayoría de consulta, que no podía utilizar el índice manera similar y expresiones regulares son los mismos