如何加快我的MySQL查询?

时间:2014-06-25 17:20:19

标签: php mysql

我在拥有2700条记录的数据库上有这个mysql查询:

SELECT  
     inventura.Meno,
     inventura.DOD,
     inventura.IDproluc,
     inventura.IDbuxus,
     inventura.SM,
     inventura.cena,
     inventura.PocetBA,
     inventura.RezervacieBA,
     inventura.SkladBA,
     inventura.ShopBA,
     SUM(CASE WHEN objednavky.miesto = 'BA' OR objednavky.miesto = 'POST' THEN objednavky.ks ELSE 0 END) as cakajuciba,
     inventura.PocetBB,
     inventura.RezervacieBB,
     SUM(CASE WHEN objednavky.miesto = 'BB' THEN objednavky.ks ELSE 0 END) as cakajucibb 

     FROM inventura         

     LEFT JOIN objednavky
     ON (inventura.IDproluc=objednavky.hra) AND (objednavky.vybavene='0')         

     WHERE (true) // normally a condition goes here, this is when nothing is being searched for
     GROUP BY inventura.IDproluc
     ORDER BY inventura.meno ASC 

问题是收到结果需要大约30-50秒,我相信这太长了。

此查询用于在collumn'Meno'中搜索短语,但如果搜索框保留为空,则显示整个表格。

它需要显示整个表格,因此不能选择显示x行。

有人可以帮我提一些如何加快速度的想法吗?

我用谷歌搜索了一段时间,但却找不到能帮到我的东西。



更多信息:

数据库是Mysql 5.1,

PHP版本5.4

拉取数据的函数 - $result = mysql_query($sql)(这是一个较旧的代码,当我写它时,mysql函数还没有被弃用)

该函数拉取数据,然后将其存储到多个阵列以便稍后处理。 (处理本身几乎没有时间)


编辑: EXPLAIN的结果:

id  select_type   table      type    possible_keys  key key_len ref rows    Extra
1   SIMPLE        inventura  ALL                                    2699    Using temporary; Using filesort
1   SIMPLE        objednavky ALL                                    2264

1 个答案:

答案 0 :(得分:0)

您可以做的最简单的事情是向其添加表索引。您还可以使用表别名来简化查询的编写(查找“AS”指令)。至于索引,它基于您加入的列和您搜索的列。

需要建立索引的建议列: inventura.meno,inventura.IDproluc,objednavky.hra和objednavky.vybavene

您需要为任何表的主键创建唯一索引(每行的唯一ID)。您将需要查看跨越多个列的索引,这些索引在一次对一行中的多个列进行搜索/匹配时很有用。

<强>参考文献:

http://www.databasejournal.com/features/mysql/article.php/1382791/Optimizing-MySQL-Queries-and-Indexes.htm

http://www.tutorialspoint.com/mysql/mysql-indexes.htm

http://www.informit.com/articles/article.aspx?p=377652