MySQL查询 - 在这种情况下为什么不使用索引?

时间:2012-12-05 13:02:20

标签: mysql performance indexing

MySQL查询(版本5.1.61)

SELECT alerts.*,
       devices.user_id
  FROM alerts
       left JOIN devices
          ON alerts.device_id = devices.id
 WHERE    devices.name = 'myval'

“alerts.device_id”上有一个索引 Explain中的MySQL不使用索引,它显示类型“ALL”,行是表中行的完整计数。

我无法理解为什么它不使用这个索引。 我错过了什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

索引没有被选中,因为你没有在select和else子句中使用它。

您需要在device.name

上添加索引

你可以做一件事来强制引擎考虑索引,如果它是一个主键,它的值if大于0,如:

SELECT alerts.*,
       devices.user_id
  FROM alerts
       left JOIN devices
          ON alerts.device_id = devices.id
 WHERE    devices.name = 'myval' and alerts.deviceid>0