我正在尝试SQLite3使用json_extract表达式在(3.18) 中创建索引。我的目标是执行只需要索引才能产生结果的查询。这样做的原因是这json_extract是一项昂贵的操作,在对较大的数据集和/或值进行操作时会影响性能。我得出结论,我需要一个覆盖索引来满足我的需求。
第 1 步 - 使用正常的表结构测试理论
CREATE TABLE Player (
Id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
FirstName TEXT NOT NULL,
MiddleName TEXT,
LastName TEXT NOT NULL
);
CREATE INDEX Player_FirstName ON Player (
FirstName ASC,
LastName ASC
);
EXPLAIN QUERY PLAN SELECT
FirstName, LastName
FROM
Player
WHERE
LENGTH(LastName) > 10
ORDER BY
FirstName
LIMIT
10
OFFSET
0
Run Code Online (Sandbox Code Playgroud)
产量
SCAN TABLE Player USING COVERING INDEX Player_FirstName
Run Code Online (Sandbox Code Playgroud)
这正是我所期望的。Player_FirstName由于该ORDER BY子句,查询计划器认为索引是合适的,并且由于该WHERE …