2013-10-07 2 views
1

대용량 데이터에서 더 빠르고 더 나은 것은 무엇입니까?2 개 이상의 매개 변수가있는 MySQL LIKE 대 REGEXP

SELECT * FROM 'table' where name LIKE 'micky%' OR name LIKE 'molly%' 

SELECT * FROM 'table' where name REGEXP '(^micky | ^molly)' 

매개 변수가 10 이상이되면 느리게 하나가 더 빠릅니까?

+1

직접 해보고 결과를 벤치마킹 하시겠습니까? 당신은 * name *에 대한 인덱스를 가진 첫 번째 접근법이 훨씬 빠를 것이라는 것을 알아야한다. 반면에'name'이 인덱싱되지 않으면, 그 차이는 중요하지 않을 것입니다 (MySQL의 패턴 매칭 최적화에 따라 잠재적으로 더 빠른 두 번째 접근법이 있습니다). – eggyal

+0

매개 변수가 10 또는 100으로 증가하면 어떻게 영향을 미칩니 까? 항상 ORgex보다 OR 또는 OR 조합을 사용합니다. ? 또는 LIKE가 REGEXP보다 훨씬 빠르기 때문에 그 차이는 중요하지 않습니다. –

답변

1

쿼리 속도는 데이터베이스 구조의 인덱스에 따라 다릅니다. 'SELECT'쿼리가 인덱싱 된 매개 변수로 구성된 경우 와일드 카드가 첫 번째 문자가 아닌 경우 'LIKE'를 사용해야합니다. 그러나 구조에 인덱싱이 없으면 둘 중 하나를 사용할 수 있습니다. 두 시나리오에서 걸리는 시간을 테스트하는 것이 가장 좋습니다.

0

MySQL 정규식은 색인을 사용하지 않지만, 가능하면 색인을 사용합니다. 이 경우 검색이 와일드 카드로 시작하지 않기 때문에 LIKE는 사용 가능한 경우 색인을 사용합니다.

그래서 대답은 검색 할 때 이름에 대한 색인을 가져야한다는 것입니다. 그렇게 할 때 LIKE는이 상황에서 더 빠를 것입니다.

관련 문제