sqlite – 多列索引是否也适用于单列选择?

前端之家收集整理的这篇文章主要介绍了sqlite – 多列索引是否也适用于单列选择?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有(例如)一个索引:
CREATE INDEX someIndex ON orders (customer,date);

这个索引只加速使用客户和日期的查询,还是加速这样的单列查询

SELECT * FROM orders WHERE customer > 33;

我使用sqlite。

如果答案是肯定的,为什么可以为每个表创建多个索引?

另一个问题:当在查询中使用两个列时,组合索引与两个分离索引相比有多快?

marc_s对你的第一个问题有正确的答案。多键索引中的第一个键可以像单个键索引一样工作,但任何后续键不会。

至于复合索引的速度取决于你的数据和你的索引和查询的结构,但它通常是重要的。索引本质上允许sqlite对字段进行二进制搜索

使用您给出的示例,如果您运行查询

SELECT * from orders where customer > 33 && date > 99

sqlite将首先在整个表上使用二进制搜索获得所有结果,其中customer>然后,它将仅对寻找日期>的那些结果进行二分搜索。 99。

如果您对客户和日期使用两个单独的索引执行相同的查询sqlite将必须二次搜索整个表,首先是客户,再次是日期。

因此,您将看到的速度增加多少取决于如何根据查询构建索引。理想情况下,索引和查询中的第一个字段应该是消除最可能匹配的字段,因为通过大大减少第二个搜索必须完成的工作量,最大的速度将会提高。

有关详细信息,请参阅:
http://www.sqlite.org/optoverview.html

猜你在找的Sqlite相关文章