数据库索引混淆

时间:2015-05-10 01:00:12

标签: mysql sql database indexing

我现在一直试图找出这个答案的答案,但似乎无法绕过它。任何人都可以向我解释这些答案是如何计算的?我知道:A = 1000,B = 20,C = 10,D = 10和E = 1.我知道当没有索引时,我们必须搜索50 X 20,因为我们需要通过所有的sensorID( 50)和所有时间(每个20)。然后,当我们在sensorID上放置一个索引时,我们只需搜索时间。当我们按时间编制索引并将其降低到10时,我主要迷路了。不应该是50吗?

enter image description here

2 个答案:

答案 0 :(得分:0)

  

当我们按时填写一个索引并将其降低到10时,我主要迷失了。难道不是50吗?

仔细阅读问题:

  

...每个独特的时间都有 10 读数......

这意味着在1个索引查找操作之后(你不需要像在问题中所说的那样考虑)数据库引擎必须遍历10行(元组),在{{上应用过滤器1}}找到目标记录。

答案 1 :(得分:0)

WHERE子句中有两个“column = constant”的子句。 “最佳”INDEX是两列的复合索引。也就是INDEX(sensorID, time)。对于您提供的查询,两列的顺序无关紧要,但如果您有WHERE sensorID=123 AND time BETWEEN ...,则该顺序肯定更好。 my index cookbook中的进一步讨论。

“探测”的数量是一个(找到给定的sensorID和时间(或时间的开始)的第一个索引条目),并且它将线性扫描INDEX以找到具有相同sensorID 和在给定范围内的时间。因此,它是最佳的。

(如果你从'luke'链接或我的链接中获得更多信息,我会很高兴听到。)