꼼지락(?) 거리다가 EXPLAIN 이라는 것을 발견했습니다.
쿼리의 구조를 분석한다고 할까요?
설명하기 뭐하니 예를 들면...
atom=# select substr(full_name, 1, 2) as a, count(*) from atom_0 group by a;
a | count
////+///////
SS | 4232
(1 row)
atom=# EXPLAIN select substr(full_name, 1, 2) as a, count(*) from atom_0 group by a;
NOTICE: QUERY PLAN:
Aggregate (cost=380.24..401.40 rows=423 width=12)
/> Group (cost=380.24..390.82 rows=4232 width=12)
/> Sort (cost=380.24..380.24 rows=4232 width=12)
/> Seq Scan on atom_0 (cost=0.00..125.32 rows=4232 width=12)
위의 결과를 보면 먼저 일반적인 쿼리를 먼저하고
group 명령을 위해 소트를 하고(order by a 라고 해도 되겠죠)
그 후에 그릅으로 묵은 후에 count를 행한 것을 알 수 있습니다.
쿼리가 복잡하고 해괴할 수록 재미있는 것들이 나오더군요.
이를 태면
atom=# EXPLAIN select code,atom,number,price,atom_0.* from order_seq where order_seq.atom=atom_0.code;
NOTICE: QUERY PLAN:
Nested Loop (cost=0.00..38.35 rows=42 width=121)
/> Seq Scan on order_seq (cost=0.00..1.01 rows=1 width=40)
/> Index Scan using atom_0_pkey on atom_0 (cost=0.00..36.81 rows=42 width=81)
복수 테이블에의 쿼리는 테이블 별로 쿼리를 분해하여 실행하는 것
같습니다.(아직은 몰러...)
아, 옵션에 verbose가 있는데 그것은 사용하지 마세요.
정신건강에 해롭습니다.
인천의 나사 풀린 산호...
어제던가?
ls /a를 치고는 나오는 파일들을 보며 파일크기 별로 보고 싶은
생각이 들었습니다.
그리곤
ls /a order by
를 치고 있는 나 자신을 발견하고는 피식 웃고 말았죠.
아마 ls시에 각 필드명이 나왔다면 order by 뒤까지 쓰고 에러가
난 다음에야 내가 뭔짓을 하고 있는지 알았을 겁니다.
sql명령어를 쉘상에서 쓸수있게(db접근이 아니라, 명령어로서)
한다면 그것도 재미있겠다는 생각이 들었습니다.
('폐인'이라는 말이 별개 아니라는 생각도 들었습니다.)
이제 겨우 SQL을 시작하는 주제이 이러니 나중에는 어떻게 될까
생각하니... (도리도리...)
|