为什么不使用第二个 WHERE 条件上的索引?

发布于 2025-01-11 09:22:46 字数 983 浏览 0 评论 0原文

此查询需要 2 秒,仅返回 16 条记录:

SELECT * FROM cells WHERE cellbookguid='1' AND cellpageguid='1';

cells 包含大约 20.000 条记录。它有 42 列,例如 cellwidthcellheightcellcolorcellbackgroundcellpageguidcellbookguid 等。EXPLAIN QUERY PLAN 说:

order: 0
from: 0
detail: TABLE cells WITH INDEX idx_cells_cellbookguid

因此,因为它不使用索引 idx_cells_cellpageguid,所以需要很长时间。但是,SELECT name FROM sqlite_master WHERE type = 'index'; 显示它确实包含 idx_cells_cellpageguid。外部 SQLite 查看器还显示该列上存在索引。为什么查询不使用这个索引?

idx_cells_cellpageguid 的定义:

在此处输入图像描述

SQL 命令:

CREATE INDEX idx_cells_cellpageguid
  ON cells
  (CellPageGUID COLLATE BINARY)

This query takes 2 seconds to only return 16 records:

SELECT * FROM cells WHERE cellbookguid='1' AND cellpageguid='1';

Table cells holds around 20.000 records. It has 42 columns such as cellwidth, cellheight, cellcolor, cellbackground, cellpageguid, cellbookguid, etc. EXPLAIN QUERY PLAN says:

order: 0
from: 0
detail: TABLE cells WITH INDEX idx_cells_cellbookguid

So because it does not use the index idx_cells_cellpageguid it takes so long. However, SELECT name FROM sqlite_master WHERE type = 'index'; shows it does contain idx_cells_cellpageguid. An external SQLite viewer also shows that index is present on the column. Why does the query not use this index?

The definition of idx_cells_cellpageguid:

enter image description here

The SQL command:

CREATE INDEX idx_cells_cellpageguid
  ON cells
  (CellPageGUID COLLATE BINARY)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文