我在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',那麼它會更容易混淆,更準確。 –