2009-09-21 4 views

답변

14

나는 꽤 그래픽 도구가 없다는 것을 알고 있지만, 여러분이 찾는 모든 정보는 EXPLAIN 키워드에서 얻을 수 있습니다.

 
sqlite> explain select * from users where name='foo'; 
0|Trace|0|0|0||00| 
1|String8|0|1|0|foo|00| 
2|Goto|0|18|0||00| 
3|OpenRead|0|2|0|2|00| 
4|OpenRead|1|3|0|keyinfo(1,BINARY)|00| 
5|IsNull|1|15|0||00| 
6|Affinity|1|1|0|bb|00| 
7|SeekGe|1|15|1|1|00| 
8|IdxGE|1|15|1|1|01| 
9|IdxRowid|1|2|0||00| 
10|Seek|0|2|0||00| 
11|Column|1|0|3||00| 
12|Column|0|1|4||00| 
13|ResultRow|3|2|0||00| 
14|Next|1|8|0||00| 
15|Close|0|0|0||00| 
16|Close|1|0|0||00| 
17|Halt|0|0|0||00| 
18|Transaction|0|0|0||00| 
19|VerifyCookie|0|5|0||00| 
20|TableLock|0|2|0|users|00| 
21|Goto|0|3|0||00| 
: 이름에 입각 쿼리가 user_names 인덱스를 사용하는 반면

 
sqlite> explain select * from users where email='foo'; 
0|Trace|0|0|0||00| 
1|String8|0|1|0|foo|00| 
2|Goto|0|13|0||00| 
3|OpenRead|0|2|0|2|00| 
4|Rewind|0|11|0||00| 
5|Column|0|1|2||00| 
6|Ne|1|10|2|collseq(BINARY)|6a| 
7|Column|0|0|4||00| 
8|Column|0|1|5||00| 
9|ResultRow|4|2|0||00| 
10|Next|0|5|0||01| 
11|Close|0|0|0||00| 
12|Halt|0|0|0||00| 
13|Transaction|0|0|0||00| 
14|VerifyCookie|0|5|0||00| 
15|TableLock|0|2|0|users|00| 
16|Goto|0|3|0||00| 

:

 
sqlite> create table users (name, email); 
sqlite> create index user_names on users (name); 

email에 입각 쿼리가 인덱스를 사용하지 않습니다

는이 데이터베이스를 고려

EXPLAIN을 사용하면 SQLite는의 가상 머신, VDBE와 그립에 오는 :

http://www.sqlite.org/vdbe.html

은하지만이 보이는, 당신에게 쿼리에 대한 전체 이야기를주는만큼 어려운 일이 아니다. outis으로

+28

'VM의 지침이없는 인덱스 사용에 대한 정보를 제공합니다 QUERY PLAN'을 설명한다. – outis

+1

명령 줄에서 .explain 옵션을 활성화하여 출력 형식을 향상시킬 수도 있습니다. ".explain ON | OFF EXPLAIN에 적합한 출력 모드를 켜거나 끕니다." – Wade

+0

위의 링크는 구식입니다. 여기에 가상 시스템에 대한 정보가 있습니다. http://www.sqlite.org/opcode.html – Fabian

17

는 말했다 : 나처럼 단순히 그것을 사용하는 경우

EXPLAIN QUERY PLAN SELECT * FROM FOO 

당신이 당신의 인덱스 타격하고 보장하기 위해,보다 읽기 쉬운 출력 트릭을합니까

+1

이 명령의 출력에 대한 좋은 설명이 여기에 있습니다. https : //www.sqlite .org/eqp.html – JoshB

관련 문제