【问题标题】:Why does an SQLite index not speed up my query为什么 SQLite 索引不能加快我的查询速度
【发布时间】:2013-05-24 13:47:49
【问题描述】:

我有 2 张桌子:

tblValidItems - | - tblItems

validID        itemID
-------        ------
3              1
5              2
6              3
...            4
~ 8 K items    5
               ..... 
               ~ 20 K items

我的查询是在tblItems 中选择某些也在tblValidItems 中的东西:

SELECT tblItems.itemID FROM tblItems 
JOIN tblValidItems ON tblItems.itemID = tblValidItems.validID

我尝试了在两个表上使用和不使用索引的查询,但结果变化不大:

  • 两个表都有索引 - 127 毫秒
  • 两个表上都没有索引 - 132 毫秒

这让我很吃惊,因为我认为索引会极大地影响查询的速度。为什么不呢?

【问题讨论】:

  • ID 列是主键吗?
  • 请发布架构。
  • 如果 ID 允许 NULL,引擎会遇到开销。此外,如果它们不是相同的数据类型并且引擎必须进行隐式转换,则可能不会使用索引。如果统计信息不可用,则索引也可能无法使用(例如,您创建了索引,然后插入了 8k 个有效项) 优化器可能选择不使用索引的很多原因。

标签: sql sqlite


【解决方案1】:

我猜查询主要是返回 8,000 个值的时间,而不是查找行的时间。

当您减少正在处理的数据的大小时,索引最有用。从 20k 行减少到 8k 行并不是特别显着。

【讨论】:

    【解决方案2】:

    Sqlite 主键默认被索引。无论如何,您正在加入索引主键。

    如果您对 sqlite 如何处理您的查询有疑问,请使用EXPLAIN QUERY PLAN

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-19
      • 1970-01-01
      • 2010-11-17
      • 2012-12-24
      • 2021-04-01
      • 2012-05-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多