[SQLite] GLOB vs. LIKE |
http://www.sqlite.org/lang_expr.html#like
-
LIKE operator 는 pattern matching 비교를 이용해서 비교를 한다.
% 는 0 개 이상의 character 를 의미하고, _ 는 1개의 character 를 의미한다.
ASCII 에 대해서는 대소문자는 가리지 않는다. 즉 i 과 I 를 동일하게 취급한다.
그러나 ASCII 가 아닌 경우(unicode)에 대해서는 case sensitive 하다.
-
아래와 같은 PRAGMA 를 통해 case sensitive 로 만들 수 있다.
PRAGMA case_sensitive_live = boolean;
-
GLOB 는 LIKE 와 비슷하지만 wildcard 로 Unix 의 globbing syntax 를 사용한다.
그리고 GLOB 는 case sensitive 이다.
-
https://en.wikipedia.org/wiki/Glob_(programming)
Unix globbing syntax 에서의 wild card 는 아래와 같다.
* : 0개 이상의 char match
? : 1개의 char match
[abc] : one of the char match
[a-z] : one of the char in the range
-
REGEXP operator 는 regexp() 라는 user function 을 사용한다.
regexp() 는 기본적으로 구현되어 있지 않기 때문에 그냥 사용하면 error 가 발생한다.
MATCH 라는 operator 도 있으며 이 역시 match() function 을 사용한다. match() function 은 기본적으로 exception 을 던진다.
-
LIKE 를 사용하는 경우 인덱스를 활용하지 못하고 전체 테이블을 조회한다.
하지만 GLOB 를 사용하는 경우 인덱스를 활요할 수 있는 경우 인덱스를 활용한다.
( 문자열 뒤쪽에 * 가 붙는경우는 Index 를 활용할 수 있지만 문자열 앞쪽에 * 가 붙은 경우에는 Index 를 활용할 수 없다. )
'프로그래밍 놀이터 > Database' 카테고리의 다른 글
[Database] -journal 파일의 정체는 뭘까? ( + WAL, temp files ) (2) | 2019.01.15 |
---|---|
[Sqlite] 1802 error 의 정체는? (0) | 2018.12.18 |
[SQLite3] Appendix. SQLite3 커맨드 라인 도구, 관리도구 (0) | 2018.05.26 |
[SQLite3] 09. 안드로이드와 데이터베이스 (0) | 2018.05.25 |
[SQLite3] 06. 임베디드 SQLite3 최적화 #2 (0) | 2018.05.23 |
댓글