Mysql 防止在查询中使用临时表
我正在对下面的查询运行explain extended,我不确定为什么会发生这种情况。我在Mysql 防止在查询中使用临时表,mysql,query-optimization,Mysql,Query Optimization,我正在对下面的查询运行explain extended,我不确定为什么会发生这种情况。我在site.id、site.parent\u id和site.enabled上添加了一个索引,但我仍然看到它正在创建一个临时表 SELECT site.label AS site_label, deal . * , site.id AS site_id FROM site LEFT JOIN deal ON ( deal.site_id = site.id AND DAYOFYEAR( deal.create
site.id、site.parent\u id和site.enabled上添加了一个索引,但我仍然看到它正在创建一个临时表
SELECT site.label AS site_label, deal . * , site.id AS site_id
FROM site
LEFT JOIN deal ON ( deal.site_id = site.id
AND DAYOFYEAR( deal.created ) = DAYOFYEAR( NOW( ) ) )
WHERE (
site.id =2
OR site.parent_id =2
)
AND site.enabled =1
ORDER BY site.order ASC , deal.created DESC
有没有关于如何防止使用临时表的建议
id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE site ALL id,parent_id,id_2 NULL NULL NULL 10 100.00 Using where; Using temporary; Using filesort
1 SIMPLE deal ref site_id site_id 4 dealclippings.site.id 235 100.00
您执行的查询无法很好地优化:
尽量避免使用或
Mysql无法优化(使用索引)以进行不同方向的排序(您同时使用ASC
和DESC
按顺序进行排序)
DAYOFYEAR(deal.created)
避免在您搜索的字段上使用函数
但是在您对查询性能感到满意之前,您不应该知道临时表
标签,是吗?您的目标是让查询执行得更快,还是仅仅为了避免临时表
标签我仍然看到它正在创建一个临时表
那又怎样?谢谢你的帮助。。。。我很满意,但因为这是我网站上的主要查询,我想我还是看看它是否可以改进。@Webnet:10x235行太少了,不必担心。但无论如何,记住我上面提到的第1、2、3项