select_all
SELECT ALL
동영상 설명은 아래에 있습니다.
모든 Datatype의 데이터(키)를 조회
이전까지는 select 문에서 datatype을 지정해서 조회를 했습니다.
Datatype에 ALL을 지정하면 모든 데이터(키)를 조회할 수 있습니다.
SELECT * FROM ALL.*;
아래 Example 쿼리에서 조회하는 데이터(키)는 String, List, Set, Zset, Hash, Stream에서 입력한 것입니다.
All의 컬럼은 key 하나입니다. Value는 조회할 수 없습니다.
- 이 경우 항상 키 전체를 스켄(scan)합니다. 그러므로 키가 많을 경우 사용하지 않는 것이 좋습니다. Where 조건을 사용해도 마찬가지 입니다. 키 개수가 수천개 이내일 경우 사용하는 것을 권장합니다.
- 키 조건은 where를 사용하세요. All.key* 이런 조건은 적용되지 않습니다.
- 키가 정렬(sort)되어 있지 않습니다. 필요하면 order by key를 사용하세요.
Datatype을 지정했을 경우 내부적으로 ZSet에서 데이터(키)를 조회하고 All을 지정하면 Dict(hash table)에서 조회합니다. ZSet은 정렬된 상태를 유지하는 구조이고 Dict은 순서없이 저장되는 구조입니다.
SELECT
Example
명령> | select * from all.*; opcode |
결과> |
0) key 1) myset2 2) sensor_1 3) mystr5 ... 중간 생략 ... 35) subject1 36) mynum2 |
ORDER, LIMIT
Order by 또는 Limit를 사용할 수 있습니다.
Example
명령> | select * from all.* order by key; opcode |
결과> |
0) key 1) myint1 2) myint2 3) myint3 ... 중간 생략 ... 35) subject3 36) subject4 |
명령> | select * from all.* order by key desc; opcode |
결과> |
0) key 1) subject4 2) subject3 3) subject2 ... 중간 생략 ... 35) myint2 36) myint1 |
명령> | select * from all.* limit 10; opcode |
결과> |
0) key 1) myset2 2) sensor_1 3) mystr5 ... 중간 생략 ... 9) myzset2 10) mylist1 |
명령> | select * from all.* order by key limit 10; opcode |
결과> |
0) key 1) myint1 2) myint2 3) myint3 ... 중간 생략 ... 9) myname1 10) myname2 |
명령> | select * from all.* order by key limit 5,10; opcode |
결과> |
0) key 1) mylist1 2) mylist2 3) mylist3 ... 중간 생략 ... 9) mynum1 10) mynum2 |
FUNCTION
- Count(), min(), max()같은 일반적인 function을 사용할 수 있습니다.
- Valcnt(), len(), card()는 모두 동일하게 value의 개수를 리턴하는 function입니다.
사용 편의를 위해서 여러 이름으로 만들었습니다. - Count(key)보다 count(*)가 더 빠릅니다.
Count(*)는 키 전체 개수를 한번에 가져오고, count(key)는 키를 하나씩 일일이 셉니다.
Example
명령> | select count(*) from all.*; opcode |
결과> |
0) count(*) 1) 36 |
명령> | select count(key) from all.*; opcode |
결과> |
0) count(key) 1) 36 |
명령> | select key, valcnt(key), len(key), card(key) from all.*; opcode |
결과> |
0) key|valcnt(key)|len(key)|card(key)
1) myset2|5|5|5 2) sensor_1|5|5|5 3) mystr5|1|1|1 ... 중간 생략 ... 35) subject1|4|4|4 36) mynum2|1|1|1 |
명령> | select min(key), max(key) from all.*; opcode |
결과> |
0) min(key)|max(key) 1) myint1|subject4 |
명령> | select key, upper(key), length(key) from all.*; opcode |
결과> |
0) key|upper(key)|length(key) 1) myset2|MYSET2|6 2) sensor_1|SENSOR_1|8 3) mystr5|MYSTR5|6 ... 중간 생략 ... 35) subject1|SUBJECT1|8 36) mynum2|MYNUM2|6 |
WHERE
- All에서는 all.key*와 같이 사용할 수 없습니다. Where key = 'key1' or key glob 'key*'와 같이 사용하세요. 이 경우에도 full scan 합니다.
Example
명령> | select * from all.* where key <= 'myint3'; opcode |
결과> |
0) key 1) myint1 2) myint3 3) myint2 |
명령> | select * from all.* where key > 'myint3'; opcode |
결과> |
0) key 1) myset2 2) sensor_1 3) mystr5 ... 중간 생략 ... 32) subject1 33) mynum2 |
명령> | select * from all.* where key = 'myint3'; opcode |
결과> |
0) key 1) myint3 |
명령> | select * from all.* where key != 'myint3'; opcode |
결과> |
0) key 1) myset2 2) sensor_1 3) mystr5 ... 중간 생략 ... 34) subject1 35) mynum2 |
GLOB, LIKE
- Glob는 와일드카드(wildcard)로 '*'를 사용하고, 대소문자를 구분합니다.
- Like는 '%'를 사용하고 대소문자 구분없이 비교합니다.
Example
BETWEEN, IN
- Between, Not between 사용 가능합니다.
- IN, Not in 사용할 수 있습니다.
Example
명령> | select * from all.* where key between 'myset1' and 'mystr5'; opcode |
결과> |
0) key 1) myset2 2) mystr5 3) mystr3 ... 중간 생략 ... 7) mystr4 8) myset1 |
명령> | select * from all.* where key not between 'myset1' and 'mystr5'; opcode |
결과> |
0) key 1) sensor_1 2) mynum1 3) sensor_3 ... 중간 생략 ... 27) subject1 28) mynum2 |
명령> | select * from all.* where key in ('myint1','myint3'); opcode |
결과> |
0) key 1) myint1 2) myint3 |
명령> | select * from all.* where key not in ('myint1','myint3'); opcode |
결과> |
0) key 1) myset2 2) sensor_1 3) mystr5 ... 중간 생략 ... 33) subject1 34) mynum2 |
GROUP
Example
명령> | select left(key,5), count(*) from all.* group by left(key,5); opcode |
결과> |
0) left(key,5)|count(*) 1) myint|5 2) mylis|3 3) mynam|5 ... 중간 생략 ... 9) senso|3 10) subje|4 |
명령> | select left(key,5), min(key), max(key) from all.* group by left(key,5); opcode |
결과> |
0) left(key,5)|min(key)|max(key) 1) myint|myint1|myint5 2) mylis|mylist1|mylist3 3) mynam|myname1|myname5 ... 중간 생략 ... 9) senso|sensor_1|sensor_3 10) subje|subject1|subject4 |
REDIS FUNCTION
- updatetime(): 키 생성/수정 일시를 리턴합니다.
- type(): 키의 datatype을 리턴합니다.
- encoding(): 키의 내부 datatype을 리턴합니다.
- memory(): 키의 메모리 사용량(value 포함)을 리턴합니다.
- 기타 여러 function을 사용할 수 있습니다.
Example
명령> | select key, updatetime(key) from all.*; opcode |
결과> |
0) key|updatetime(key) 1) myset2|2022-04-07 14:50:00 2) sensor_1|2022-04-07 14:50:00 3) mystr5|2022-04-07 14:50:00 ... 중간 생략 ... 35) subject1|2022-04-07 14:50:00 36) mynum2|2022-04-07 14:50:00 |
명령> | select key, type(key), encoding(key) from all.*; opcode |
결과> |
0) key|type(key)|encoding(key) 1) myset2|set|intset 2) sensor_1|stream|stream 3) mystr5|string|embstr ... 중간 생략 ... 35) subject1|hash|ziplist 36) mynum2|string|embstr |
명령> | select key, type(key), encoding(key) from all.* order by type(key), encoding(key); opcode |
결과> |
0) key|type(key)|encoding(key) 1) myname2|hash|ziplist 2) subject2|hash|ziplist 3) subject3|hash|ziplist ... 중간 생략 ... 35) myzset2|zset|ziplist 36) myzset1|zset|ziplist |
명령> | select key, memory(key) from all.*; opcode |
결과> |
0) key|memory(key)
1) myset2|74 2) sensor_1|721 3) mystr5|65 ... 중간 생략 ... 35) subject1|105 36) mynum2|62 |
명령> | select key, memory(key) from all.* order by memory(key); opcode |
결과> |
0) key|memory(key) 1) myint5|56 2) myint1|56 3) myint3|56 ... 중간 생략 ... 35) sensor_1|721 36) sensor_2|835 |
EXPIRE
Expire를 입력합니다.
Example
명령> | expire myint1 86100 |
명령> | expire myint2 86200 |
명령> | expire mylist1 86300 |
명령> | expire mylist2 86400 |
명령> | expire myname1 86500 |
명령> | expire myname2 86600 |
명령> | expire myset1 86700 |
명령> | expire myset2 86800 |
- TTL(key): 만료 시간을 초로 리턴합니다.
- TTLDATE(key): 만료 시간을 일시로 리턴합니다. 예) 2022-04-08 14:56:40
Example
명령> | select key, ttl(key), ttldate(key) from all.*; opcode |
결과> |
0) key|ttl(key)|ttldate(key) 1) myset2|86800|2022-04-08 14:56:40 2) sensor_1|-1|1970-01-01 09:00:00 3) mystr5|-1|1970-01-01 09:00:00 ... 중간 생략 ... 35) subject1|-1|1970-01-01 09:00:00 36) mynum2|-1|1970-01-01 09:00:00 |
명령> | select key, ttl(key), ttldate(key) from all.* where ttl(key) > 0; opcode |
결과> |
0) key|ttl(key)|ttldate(key) 1) myset2|86800|2022-04-08 14:56:40 2) mylist2|86400|2022-04-08 14:50:00 3) mylist1|86300|2022-04-08 14:48:20 ... 중간 생략 ... 7) myname1|86500|2022-04-08 14:51:40 8) myset1|86700|2022-04-08 14:55:00 |
동영상 설명
Redis SQL Select All
OPCODE
OPCODE는 SQL의 실행 계획(execution plan)입니다.
select * from all.*;
select * from all.* order by key;
select * from all.* order by key desc;
select * from all.* limit 10;
select * from all.* order by key limit 10;
select * from all.* order by key limit 5,10;
select min(key), max(key) from all.*;
select key, upper(key), length(key) from all.*;
select count(*) from all.*;
select count(key) from all.*;
select key, valcnt(key), len(key), card(key) from all.*;
select * from all.* where key <= 'myint3';
select * from all.* where key > 'myint3';
select * from all.* where key = 'myint3';
select * from all.* where key != 'myint3';
select * from all.* where key between 'myset1' and 'mystr5';
select * from all.* where key not between 'myset1' and 'mystr5';
select * from all.* where key glob 'sub*';
select * from all.* where key like 'sub%';
select * from all.* where key in ('myint1','myint3');
select * from all.* where key not in ('myint1','myint3');
select left(key,5), count(*) from all.* group by left(key,5);
select left(key,5), min(key), max(key) from all.* group by left(key,5);
select key, updatetime(key) from all.*;
select key, type(key), encoding(key) from all.*;
select key, type(key), encoding(key) from all.* order by type(key), encoding(key);
select key, memory(key) from all.*;
select key, memory(key) from all.* order by memory(key);
select key, ttl(key), ttldate(key) from all.*;
select key, ttl(key), ttldate(key) from all.* where ttl(key) > 0;
<< Date functions | Select ALL | Select Expires >> |
---|
Email
返事がかかってなれば、メールでお知らせします。