mysql - 成对索引和单列索引的区别?

标签 mysql sql

我正在使用这个查询:

SELECT SENSOR_ID, (BOX_COUNT * 6) AS BOX_COUNT, `TIME` AS `TIMESTAMP` 
FROM lu_sensor_log INNER JOIN lu_sensors S 
ON S.MACHINE_ID=1 AND S.ID=SENSOR_ID 
WHERE `TIME` >= '2013-09-04 15:30:00' AND `TIME` <= ' 2013-09-04 17:00:00' 
ORDER BY `TIME` ASC

这是一个非常简单的查询,一点也不复杂。以前,我们的数据库表有一个针对 SENSOR_IDTIME 的配对索引。此查询需要(平均)4 秒才能完成。从那以后,我删除了配对索引并在 SENSOR_IDTIME 列上设置了单独的索引 - 现在查询几乎是即时的。

我已经尝试在谷歌上快速搜索这些差异,但似乎找不到任何具体证据来说明为什么一种方法比另一种方法更快。

谁能帮我解决这个问题?为什么单列索引比相同列上的成对索引快得多? (当然在这种情况下更快)。

非常感谢。

最佳答案

您没有使用配对索引。您一次根据其中一列限制数据。不能同时进行。

事实上,由于 WHERE 子句,您只是在使用 TIME 索引。如果您的 WHERE 子句另外限制了 SENSOR_ID,配对索引会加快您的查询速度。

要查看真正使用了哪些索引,您应该查看查询的执行计划。

关于mysql - 成对索引和单列索引的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18635659/

相关文章:

php - 如何使用带事务的 php 插入到两个表中?

php - 将 404 重定向到类似的 url

php - 通过 php 对 Mysql 进行压力测试

SQL从int转换为十进制

php - 这个使用准备好的语句的 mysqli 代码对 SQL 注入(inject)安全吗?

php - 如何根据相关表中的值更新MYSQL表列

mysql - MSSQL 到 MySQL 的迁移

php - Magento - 无法重新索引产品价格 - 外键约束失败

sql - 有没有办法做像 SQL NOT top 语句这样的事情?

mysql - 如何删除表的所有外键