【发布时间】: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 个有效项) 优化器可能选择不使用索引的很多原因。