就像Mark Baker建议的那样,对查询做一个解释,它可以帮助你找到很多可以忘记索引的地方。
基本上每个主键和外键都应该有一个。
同样不同的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子句匹配的所有行的行来完成的。然后对键进行排序,并按排序顺序检索行