복붙노트

[SQL] ( "LIKE"및 "="비교) REGEXP 성능

SQL

( "LIKE"및 "="비교) REGEXP 성능

내가 MySQL을 사용하고 있습니다. 나는 여기에 한 단어의 경기를 데이터베이스에 쿼리하는 방법에 대한 질문을했다.

예를 들어, = 동작 예와 비교해 WHERE COLUMN_NAME = '값', 정규 표현식 작업이 큰 테이블 =보다 훨씬 더 느리다?

내가 말할 수있는, = 다음과 같은 빠른 동작이며, REGEXP 성능 관점에서 가장 가난한 하나?

해결법

  1. ==============================

    1.관련하여 정규 표현식

    관련하여 정규 표현식

    정규 표현식은 MySQL의에서 인덱스를 사용하지 않을 수 있습니다. = 인덱스의 경우를 사용합니다 :

    이들과 다른 난해한주의 사항이 고려 = 비교가 훨씬 빨리 정규 표현식보다.

    같은과 관련하여

    와일드 카드는 첫 번째 문자가 아닌 경우 LIKE 인덱스를 사용할 수 있습니다.

    SELECT * FROM t WHERE a LIKE 'abc'   <<-- (case insensitive `=`) can use an index
    SELECT * FROM t WHERE a LIKE 'abc%'  <<-- can use an index
    SELECT * FROM t WHERE a LIKE 'a%'    <<-- can use an index, depending on cardinality
    SELECT * FROM t WHERE a LIKE '%a%'   <<-- cannot use an index
    SELECT * FROM t WHERE a LIKE '_agf'  <<-- cannot use an index
    

    인덱스를 사용하는 경우 등의 성능에 매우 근접 (리턴 동일한 행 수를 가정) =이다.

  2. ==============================

    2.전체 텍스트 검색 : 데이터를 검색하는 또 다른 방법이있다. 등 = (실행 시간) 충분하지 않고 한편 스핑크스, 루씬 너무 강력 될 때 사용될 수있다.

    전체 텍스트 검색 : 데이터를 검색하는 또 다른 방법이있다. 등 = (실행 시간) 충분하지 않고 한편 스핑크스, 루씬 너무 강력 될 때 사용될 수있다.

    하는 방법은 열 및 쿼리 거기에 전체 텍스트 인덱스를 생성해야합니다 그것을 사용. 당신이 ft_min_word_len의 유의하십시오 사용할 경우, ft_max_word_len 시스템은 그 최소 / 최대 크기의 단어를 감소 바르.

    희망이 도움이.

    귀하의 질문의 나머지는 @Johan 응답했다.

  3. from https://stackoverflow.com/questions/8153271/regexp-performance-compare-with-like-and by cc-by-sa and MIT license