>
源码> .timer
查询1
源码>从alpha中选择count(*),其中Name ='SHOUT',日期在20130101和20140101之间;
3783443
CPU时间:用户42.067187 sys 2.098010
查询2
源码>从alpha中选择count(*),其中20130101和20140101之间的日期;
3783443
CPU时间:用户0.450523 sys 0.054451
架构:
源码> .schema CREATE TABLE alpha( 日期日期, 名称VARCHAR(50), 符号VARCHAR(10), 价值FLOAT, ChangeDate DATETIME DEFAULT CURRENT_TIMESTAMP, 主要密钥(日期,名称,符号)); CREATE TABLE cusip( 符号VARCHAR(10), Cusip VARCHAR(9), PRIMARY KEY(符号));
在alpha(Date)上创建INDEX idx_alpha_Date;
在alpha(符号)上创建INDEX idx_alpha_Symbol;
在alpha(日期,名称)上创建INDEX idx_alpha_date_name;
在alpha(Name)上创建INDEX idx_alpha_name;
答案 0 :(得分:0)
使用explain query plan
查看索引的使用方式,并了解更多详细信息explain
,了解它如何转换为sqlite虚拟机代码。
sqlite> explain query plan select count(*) from alpha where Name = 'SHOUT' and Date between 20130101 and 20140101;
0|0|0|SEARCH TABLE alpha USING INDEX idx_alpha_name (Name=?) (~5 rows)
sqlite> explain query plan select count(*) from alpha where Date between 20130101 and 20140101;
0|0|0|SEARCH TABLE alpha USING COVERING INDEX idx_alpha_date_name (Date>? AND Date<?) (~31250 rows)
在第一种情况下,索引仅用于Name = 'SHOUT'
部分,Date between 20130101 and 20140101
应用于该中间结果集中的所有结果,可能需要很长时间。在后一种情况下,结果可以仅从索引获得,而无需扫描中间结果集。