[英]Mysql innodb query returning slow result
我有以下查詢需要時間。 Mytable類型是innodb,並且在字段tsh_id上具有主鍵,我還在transaction_Id字段上添加了索引
以下是我的數據庫存儲過程中的實現。
DECLARE lv_timestamp DATETIME(3);
SET @lv_timestamp = NOW(3);
IF(mycondition) then
SET @lv_Duration :=( SELECT UNIX_TIMESTAMP (@lv_timestamp) - UNIX_TIMESTAMP ( `changedon` )
FROM `MyTable`
WHERE transaction_Id = _transaction_Id
ORDER BY tsh_id DESC
LIMIT 1)
End if;
請提出任何改進建議
編輯:
解釋查詢說
"select_type":"SIMPLE",
"table":"MyTable",
"type":"ref",
"possible_keys":"IX_MyTable_Transaction",
"key":"IX_MyTable_Transaction",
"key_len":"98",
"ref":"const",
"rows":1,
"Extra":"Using where"
我相當確定您的主鍵不是集群鍵(它可能為null或不是唯一的,或者您曾在某一時刻對其進行過更改),因為這將解釋這種現象,至少在transaction_Id
也不唯一的情況下(否則,不需要limit 1
)。
為了改進此特定查詢,您可以創建以下索引:
create index ix_mytable_transaction_id_tsh_id on MyTable (transaction_id, tsh_id desc);
再次使用explain
。
如果它不使用新密鑰,請強制執行以下操作:
SELECT ... FROM `MyTable` force index(ix_mytable_transaction_id_tsh_id) ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.