我想调整此查询以获得更好的性能。
查询:
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';
答案 0 :(得分:0)
CREATE TABLE `device_raw_usages` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`device_id` int(11) DEFAULT NULL,
`outlet_id` int(11) NOT NULL,
`duration` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`current` float(11,4) DEFAULT NULL,
`voltage` float(11,4) NOT NULL,
`kw_used` float NOT NULL,
`outlet_total_kwh` float(11,4) DEFAULT NULL,
`outlet_kwh_demand_15` float(11,4) DEFAULT NULL,
`outlet_kw_demand_peak` float(11,4) DEFAULT NULL,
`submeter_real_kw` float(11,4) DEFAULT NULL,
`submeter_total_kwh` float(11,4) DEFAULT NULL,
`submeter_kwh_demand_15` float(11,4) DEFAULT NULL,
`submeter_kw_demand_peak` float(11,4) DEFAULT NULL,
`peak_voltage` float(11,2) DEFAULT NULL,
`peak_current` float(11,2) DEFAULT NULL,
`demand` float(11,2) DEFAULT NULL,
`inst_demand` float(11,2) DEFAULT NULL,
`hist_peek_demand` float(11,2) DEFAULT NULL,
`power_factor` float(11,2) DEFAULT NULL,
`crest_factor` float(11,2) DEFAULT NULL,
`frequency` varchar(20) DEFAULT NULL,
`app_power` float(11,2) DEFAULT NULL,
`tot_app_energy` float(11,2) DEFAULT NULL,
`tot_har_dist_vol` float(11,2) DEFAULT NULL,
`tot_har_dist_curr` float(11,2) DEFAULT NULL,
`har_x_dist_v` float(11,2) DEFAULT NULL,
`har_y_dist_v` float(11,2) DEFAULT NULL,
`har_z_dist_v` float(11,2) DEFAULT NULL,
`har_x_dist_c` float(11,2) DEFAULT NULL,
`har_y_dist_c` float(11,2) DEFAULT NULL,
`har_z_dist_c` float(11,2) DEFAULT NULL,
`interval` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1136511 DEFAULT CHARSET=latin1 |
答案 1 :(得分:0)
要进行优化,请添加复合索引:
INDEX(device_id, outlet_id, duration)
无关评论:
FLOAT(m,n)
几乎总是错误的做法。请考虑DECIMAL(m,n)
或普通FLOAT
。
这些列真的是最佳的吗?在适当的地方使用NOT NULL
。
修改强>
假设您已经构建了表,可以通过执行以下操作添加索引:
ALTER TABLE device_raw_usages ADD INDEX(device_id, outlet_id, duration);
此特定索引有助于您提供的 one SELECT
。它可能会或可能不会帮助其他SELECTs
。 Here是关于如何为给定的INDEX
撰写“最佳”SELECT
的简短手册。