我在MySQL数据库中有2个表。一个表是用于数据记录,并具有以下栏目:可以进一步提高查询性能(MySQL)
(让这个被称为数据记录器表)
ID - 主键
网站ID,设备ID,设备编号,设备参数,值,记录日期
为了从该表中选择任何记录,在where子句中使用列站点ID,设备ID,设备编号,设备参数以及指定日期范围(记录日期)。
其他表(让这种被称为loggerparameterdetails表)具有以下的列:
设备ID 设备参数 - 这2是复合主键
参数描述和参数部是其他此表中的列
数据记录器表具有大量记录(明智的记录数将约为100万条记录)。为了应用程序报告目的,我使用参数名称上的loggerparameterdetails表和记录在where子句中指定站点ID,设备编号,参数名称和日期记录范围来加入数据记录器表。
因此,我创建了2台以下指标:
综合指数包括网站ID,设备ID,设备数量,参数名称和日期记录 - 数据采集表(这些列都在where子句所以创建了一个索引这些)
参数名称 - loggerparameterdetails表(因为此列在加入)
用于一年日期范围,我个人资料的查询和看到,发送数据的过程显示周围3.5-4秒。查询看起来是这样的:
select logtbl.date_logged, logparam.cmd_desc, logtbl.value, logparam.cmd_unit
from datalogger logtbl join loggerparameterdetails logparam
on logtbl.cmd_name=logparam.cmd_name where logtbl.site_id=1
and logtbl.equipment_number=1 and logtbl.cmd_name='aaaabbab'
and logtbl.date_logged between '2016-02-02 00:00:00' and '2017-02-06 00:00:00'
这个时间可以进一步改善吗?
更新:
用于查询的解释计划是如下:
'ID'; 'SELECT_TYPE'; '表'; '类型'; 'possible_keys'; '键';'key_len ';'ref';'rows';'Extra' '1';'SIMPLE';'logparam';'ref';'mibobjName_idx';'mibobjName_idx';'52';'const';'1';' ''where''
'1';'SIMPLE';'logtbl';'range';'loggertbl_combined_idx';'loggertbl_combined_idx';'69'; \ N;'528604';'Using where;使用加入缓冲区'
编辑您的问题与解释计划也。 – Mihai
在查询前添加'explain'并将其结果添加到帖子中请 – Alexey
如果您提供'SHOW CREATE TABLE',那么它会更容易混淆,更准确。 –