2016-10-20 88 views
0

我想優化這個MySQL查詢。這對我來說太晚了,因爲它需要5.6秒執行。我使用分析器來解決問題,但我對數據庫沒有太多的瞭解。我的查詢是在這裏:如何調整mysql慢速查詢?

SELECT 
         n.name, 
         n.computedmeaning, 
         m.origin,        
         m.gender, 
         m.pronunciation, 
         m.similar, 
         m.variants 
         FROM 
         names n 
         INNER JOIN meta m ON m.nameid = n.id 
         WHERE m.religion = 'hindu' 
         AND n.computedmeaning IS NOT NULL ORDER BY n.name LIMIT 0 , 30 

我只對name表還全文搜索上的名字表啓用PARIMARY INDEX "id"meta表和PRIMARY INDEX "id"。這裏是截圖: enter image description here

最後,這裏是我的探查屏幕截圖提醒:

enter image description here

+0

查詢看起來不錯..給出了在條件 –

+0

'FULLTEXT'是非常有用的字段索引只對「言」和'MATCH ... AGAINST ...'語法。 –

回答

0

指數田間religioncomputedmeaning

參考In MySQL how to set index to the table?

CREATE INDEX語句來創建表的索引。

索引允許數據庫應用程序快速查找數據;沒有讀整個表。

+0

現在檢查執行時間.. –

0

使用索引肯定會減少查詢的運行時間。

但是,您可以嘗試下面的查詢。它會給你更好的表現。

SELECT 
     n.name, 
     n.computedmeaning, 
     m.origin,        
     m.gender, 
     m.pronunciation, 
     m.similar, 
     m.variants 
    FROM 
     (SELECT * 
      FROM names 
     WHERE computedmeaning IS NOT NULL) n 
INNER JOIN (SELECT * 
       FROM meta 
       WHERE religion='hindu') m ON m.nameid = n.id 
ORDER BY n.name LIMIT 0 , 30 
0
​​

names索引可以消耗ORDER BY,從而節省排序。它也是「覆蓋」,有助於提高性能。

meta索引應該是效率爲JOIN

又見Cookbook on indexing

+0

使用'SELECT'前面的'EXPLAIN'來產生一個查詢的「解釋計劃」。這是用於性能調優查詢的第一個工具。但我認爲上述瑞克詹姆斯提出的指標將有很大幫助。爲了幫助您理解可能運行的解釋計劃,然後添加索引,然後運行另一個解釋計劃進行比較。 –