gpt4 book ai didi

mysql - 防止查询中使用临时表

转载 作者:行者123 更新时间:2023-11-29 09:02:58 25 4
gpt4 key购买 nike

我正在对以下查询运行解释扩展,但我不确定为什么会发生这种情况。我已在 site.id、site.parent_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

最佳答案

您执行的查询无法很好地优化:

  1. 尽量避免使用 OR
  2. Mysql 无法针对不同方向的排序进行优化(使用索引)(您在一个 ASC 中同时使用 DESCORDER BY )
  3. DAYOFYEAR( deal.created )避免在搜索字段上使用函数

但你不应该意识到这一点temporary table标签直到您对查询性能感到满意为止,或者不是吗?

关于mysql - 防止查询中使用临时表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8031554/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com