2009-11-18 4 views
2

PRAGMA case_sensitive_like = ON으로 전환하면 LIKE 연산자가 쿼리를 최적화 할 수 있습니다. 필자가 측정 한 것, 정말 효과적이었습니다. "LIKE someth %"쿼리는 구획 적으로 큰 바이너리 인덱스 테이블에서 10 배 더 빠릅니다. 하지만 문제는 내 라이브러리가 내 응용 프로그램의 추가 기능으로 구현된다는 것입니다. 연결된 모든 데이터베이스를 사용하여 자체 테이블을 유지 관리합니다. 그래서 문제가sqlite에서 LIKE 대소 문자 구분을 사용하는 편리한 방법

  • 는 읽기 전용이 아닌 설정을 지원하기 때문에 내가 case_sensitive_like를 읽을 수 있습니다. 그래서 일시적으로 상태를 읽고 쿼리 후 반환 할 수 없습니다.
  • db의 주요 기능을 따라야하는 addon으로서 다른 루틴에 영향을 줄 수 있으므로 설정을 내 필요에 맞게 변경해서는 안됩니다.
  • 나는 optimizid 쿼리를 직접 호출하기 위해 Like (대소 문자를 구별하는) 내부 동등 물이 없다고 본다. 예를 들어 LIKE 대신 LIKECASESENSITIVE를 사용합니다.
  • sqlite3_create_function을 호출 할 수 있지만 LIKE (CASE SENSITIVE)를 내부적으로 호출 할 수 있는지 여부는 알 수 없습니다. 이 경우에만 설정해야 지원되기 때문에

답변

6

내가 case_sensitive_like 를 읽을 수 없습니다, 은 읽을 수 없습니다. 그래서 일시적으로 이 상태를 읽고 당신은이 같은 쿼리로 case_sensitive_like의 상태를 얻을 수 있습니다

쿼리 후 반환 할 수 없습니다

select case when 'a' like 'A' then 0 else 1 end 

어떤 case_sensitive_like = ON 경우 1을 반환하고 OFF이면 0입니다.