0

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”上有一个索引,解释中的 MySQL 不使用该索引,它显示类型“ALL”并且行是表中行的完整计数。

我不明白为什么它不使用这个索引。我错过了什么?

谢谢!

4

1 回答 1

1

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

您需要添加一个索引device.name

您可以做一件事来强制引擎在它是主键时考虑索引,如果它的值大于 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
于 2012-12-05T13:06:32.420 回答