仅在第一列使用多列索引

问题描述 投票:0回答:1

我的包含列

A
B
C
D
的表格在
A
B
上有索引。

对于查询

SELECT A,B,C,D, From MyTable WHERE A=? AND B=? ORDER BY C DESC
,我希望SQLite使用
A
B
匹配的索引,然后根据需要按
C
排序。查询执行缓慢,并且
EXPLAIN QUERY PLAN
显示 SQLite 仅使用
A
进行部分搜索,然后扫描。如果我删除
ORDER BY
,则会使用整个索引。

这是预期的吗?我可以提示 SQLite 使用整个索引吗?

sql sqlite indexing
1个回答
1
投票

由于列

c
没有索引,数据库必须检索满足列
a
b
指定条件的所有行,然后对它们进行排序。使用索引时,数据库需要根据匹配的索引条目从磁盘读取完整的行。这些行存储在磁盘上的不同位置,需要随机 I/O。另一方面,全表扫描使用顺序 I/O,这比随机 I/O 快得多。因此,当一次加载表中超过10%-30%的行时,大多数数据库会选择全表扫描。这个阈值不是固定的,取决于多种因素。

© www.soinside.com 2019 - 2024. All rights reserved.