Mysql查询FROM SLOW LOG

时间:2014-04-03 11:36:36

标签: php mysql

我的查询有问题。

查询:http://pastebin.com/RNW0vgJX 产品:10 000 时间:〜18s

我如何对此查询进行optymal?

1 个答案:

答案 0 :(得分:0)

就像Mark Ba​​ker建议的那样,对查询做一个解释,它可以帮助你找到很多可以忘记索引的地方。

基本上每个主键和外键都应该有一个。

同样不同的products。*可能非常昂贵。您可以重写像

这样的查询
select * from `products` where productid in (your first query ). 

这通常比表格的所有列上的不同更快。

解释结果: 在解释中,外键指数看起来很好。分组和排序有一些延迟:

  • 使用where WHERE子句用于限制哪些行与下一个表匹配或发送到客户端。除非您特意打算从表中获取或检查所有行,否则如果Extra值不是Using where并且表连接类型为ALL或index,则查询可能会出错。即使您正在为WHERE子句的所有部分使用索引,您也可以看到如果列可以为NULL则使用where。
  • 使用临时要解决查询,MySQL需要创建一个临时表来保存结果。如果查询包含以不同方式列出列的GROUP BY和ORDER BY子句,则通常会发生这种情况。
  • 使用filesort MySQL必须执行额外的传递以了解如何按排序顺序检索行。排序是通过根据连接类型遍历所有行并将排序键和指针存储到与WHERE子句匹配的所有行的行来完成的。然后对键进行排序,并按排序顺序检索行