【发布时间】:2015-07-23 09:34:27
【问题描述】:
我想调整这个查询以获得更好的性能。
查询:
SELECT `DeviceRawUsage`.`duration`, `DeviceRawUsage`.`current`
FROM `epowerg`.`device_raw_usages` AS `DeviceRawUsage`
WHERE `DeviceRawUsage`.`device_id` = 1 AND
`DeviceRawUsage`.`outlet_id` = 1 AND
`DeviceRawUsage`.`duration` >= '2015-06-01 00:00:00' AND
`DeviceRawUsage`.`duration` <= '2015-06-30 23:59:59';
【问题讨论】:
-
可能值得将
LIMIT添加到您想要返回的结果数量中 - 如果适用于这种情况。 IE。如果您想要 10 个结果:在查询末尾添加LIMIT 10。 -
@user3065931 我无法限制它。我希望尽可能多地调整查询。还有其他方法可以使这个查询高效吗?
-
您是否为您的列
device_id、outlet_id等定义了索引? -
请告诉我们
SHOW CREATE TABLE device_raw_usages的输出 -
提供表定义、MySQL 设置和最重要的
EXPLAIN的输出。 @user3065931 - LIMIT 在这里没有影响,它永远不会使选择更快 - 请阅读 LIMIT 如何在内部工作(MySQL 收集所有记录,然后丢弃从 OFFSET 开始的所有记录以获取 LIMIT 行数)。