2011-08-25 4 views
1

텍스트 필드의 마지막 4자를 비교하려고합니다.SQLite Like 대 Substr

성능 현명한, 어떻게해야합니까 :

select * from table where col like '%last'; 

또는

select * from table where substr(col,-4)='last'; 
+1

또 다른 고려 사항 :'LIKE'는 SQL92 표준입니다.'SUBSTR'에 대해서는 그렇게 확신하지 못합니다. –

답변

1

쿼리 전에 EXPLAIN을 사용하여 가상 컴퓨터 작업을 시도했으며 substr() 기능을 가진 제품은 LIKE 인 것보다 OP 코드가 3 개 더 많습니다. 그렇다고 반드시 느려야 함을 의미하는 것은 아니지만 그럴 수도 있습니다.

+0

고마워요, 헥사. – Francisc

1

나는 더 나은 성능을 가지고있는 모르겠지만, 첫 번째 읽고 더 나은 내가 아닌 것 성능에 큰 차이가있을 것으로 예상하십시오.

+0

Zento, 고맙습니다. – Francisc

2

당신은 와일드 카드로 끝나는를 사용하는 경우 인덱스를 활용할 수 없습니다 :

  LIKE '%.edu' 

대안은 다른 열에서 문자열의 반대 버전을 저장하는 것, 인덱스를 반대하는 -content 열을 사용하고 LIKE (또는 GLOB 함수 []를 사용하십시오. 여러 SQLite 구현에서 LIKE()가 재정의되었으므로 인덱스 사용을 방지합니다.] 찾고있는 문자열의 역 버전을 전달합니다. 예를 들어, .edu로 끝나는 URL을 찾으려면 역행 열에서 'ude.'로 시작하는 값을 검색하십시오.

+0

감사합니다. – Francisc

1

The optimizer overview 페이지 4 절에서는 LIKE 연산자가 col LIKE 'something that does not begin with a percent sign%' 종류의 식을 최적화하도록 설계되어 있다고 설명합니다.