본문 바로가기
프로그래밍 놀이터/Database

[SQLite] GLOB vs. LIKE

by 돼지왕왕돼지 2019. 1. 19.

[SQLite] GLOB vs. LIKE


http://www.sqlite.org/lang_expr.html#like

%, *, ?, ASCII, case sensitive, case_sensitive_live, Character, glob, glob index, glob syntax, glob vs like, globbing syntax, index, Like, like index, like operator, like syntax, MATCH, match function, pattern matching, pragma, regexp, regexp function, unicode, unix globbing syntax, user function, wildcard, [SQLite] GLOB vs. 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 를 활용할 수 없다. )




댓글0