簡體   English   中英

MySQL InnoDB查詢返回慢結果

[英]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"
  1. 確保您在MyTable.transaction_Id上具有索引
  2. 確保在MySQL配置中將innodb_buffer_pool_size設置為適當的值

我相當確定您的主鍵不是集群鍵(它可能為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM