Mysql 数据库索引混乱

Mysql 数据库索引混乱,mysql,sql,database,indexing,Mysql,Sql,Database,Indexing,我一直在努力找出这个答案,现在有几个答案,但似乎无法让我的头围绕它。谁能给我解释一下这些答案是如何计算的吗?我知道:A=1000,B=20,C=10,D=10,E=1。我知道当没有索引时,我们必须搜索50 X 20,因为我们需要遍历所有sensorID(50)和所有时间(每个20)。然后,当我们在sensorID上建立索引时,我们只需搜索时间。我主要是迷路了,当我们把一个指数放在时间上,它下降到10。是不是应该是50 我主要是迷路了,当我们把一个指数放在时间上,它下降到10。是不是应该是50

我一直在努力找出这个答案,现在有几个答案,但似乎无法让我的头围绕它。谁能给我解释一下这些答案是如何计算的吗?我知道:A=1000,B=20,C=10,D=10,E=1。我知道当没有索引时,我们必须搜索50 X 20,因为我们需要遍历所有sensorID(50)和所有时间(每个20)。然后,当我们在sensorID上建立索引时,我们只需搜索时间。我主要是迷路了,当我们把一个指数放在时间上,它下降到10。是不是应该是50

我主要是迷路了,当我们把一个指数放在时间上,它下降到10。是不是应该是50

请仔细阅读问题:

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

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

您有两个“column=constant”子句在
WHERE
子句中,将它们放在一起。“最佳”索引是两列上的复合索引。也就是说,
索引(sensorID,time)
。这两列的顺序对于您提供的查询来说并不重要,但是如果您有
其中sensorID=123和时间间隔…
,那么这个顺序肯定更好。进一步讨论请参阅

“探测器”的数量为1(用于查找给定传感器ID和时间(或开始时间)的第一个索引项),此外,它将线性扫描索引,以查找给定范围内具有相同传感器ID和时间的更多行。因此,它是最优的


(我很想知道您是否能从“luke”链接或我的链接中获得更多信息。)

阅读以下内容:它将帮助您理解SQL的这一非常重要的一个方面。那么,当我们在没有索引的情况下执行原始查询时,为什么会忽略这10个元组呢?我们只用50*20。我们不应该使用50*20*10吗?时间列上的索引在其叶节点中有指向具有相同时间值的唯一行的指针(PK值)。因此,db引擎只需要遍历这十行就可以找到它需要的那一行。为了更好地理解这一点,请阅读索引通常使用的btree结构。