加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-12 19:17:10 所属栏目:百科 来源:网络整理
导读:我有(例如)一个索引: CREATE INDEX someIndex ON orders (customer,date); 这个索引只加速使用客户和日期的查询,还是加速这样的单列查询? SELECT * FROM orders WHERE customer 33; 我使用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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读