我如何调整mysql慢查询?

时间:2016-10-20 06:37:11

标签: mysql query-optimization

我想优化这个mysql查询。在我的情况下,这是超慢的,因为执行需要5.6秒。我使用分析器来解决问题,但我对数据库没有多少了解。我的问题在这里:

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

PARIMARY INDEX "id"表上只有metaPRIMARY INDEX "id"表上只有name,名称表上也启用了全文搜索。这是屏幕截图: enter image description here

最后这是我的探查器屏幕截图警报:

enter image description here

3 个答案:

答案 0 :(得分:0)

为字段religioncomputedmeaning提供索引

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

CREATE INDEX语句用于在表中创建索引。

索引允许数据库应用程序快速查找数据;没有阅读整个表格。

答案 1 :(得分:0)

使用Index肯定会缩短查询的运行时间。

但是,您可以尝试以下查询。它会给你更好的表现。

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

答案 2 :(得分:0)

names:  INDEX(name, computedmeaning, id) -- in this order
meta:   INDEX(name_id, religion)     -- in either order

names索引可以使用ORDER BY,从而节省排序。它也是"覆盖",这有助于提高性能。

meta索引应该对JOIN有效。

另见Cookbook on indexing