sqlite使用2列作为下限和上限,高效查找?

时间:2015-02-06 15:00:51

标签: sql sqlite

我想创建一个包含2个名为lohi的列的表,然后是整数。 原始数量可能相当大。 然后,我想找到(选择)

所有的行
lookup>=lo && lookup<hi

我想必须有一些技巧才能使查找更有效。

2 个答案:

答案 0 :(得分:1)

在查询中,每个表不可能使用多个索引。

SQLite具有多列索引,但最多只有一列可以使用小于/大于比较。

您必须索引其中一列。 选择比较更可能从结果中排除更多行的那个。

参见文档:
Query Planning
The Query Planner
The Next-Generation Query Planner
EXPLAIN QUERY PLAN

答案 1 :(得分:0)

我做了这个

create table d.r (l integer check (l<h) , h integer , primary key(l,h))
explain query plan select * from d.r  where l>=5 and 5<h

0|0|0|SEARCH TABLE r USING COVERING INDEX sqlite_autoindex_r_1 (l>?)

select * from d.r  where l>=5 and 5<h
1|6
1|7
2|8
2|9
3|6
4|6
4|7
4|8
5|6
5|8
5|9