gpt4 book ai didi

mysql - 优化MySQL查询

转载 作者:行者123 更新时间:2023-11-29 23:07:27 25 4
gpt4 key购买 nike

我有一个查询,速度相对较慢。我尝试重写很多次,但找不到更好的解决方案。所以想请问一下,是一开始就写错了还是可以。

    SELECT sql_calc_found_rows 
present_id, present_id, present_url, present_name, present_text_short, foto_name, price_id, price_price, price_amount, price_dis
FROM a_present
LEFT JOIN
(SELECT price_id, price_present_id, price_supplier_id, price_dis, price_amount,
(CASE WHEN price_dis <> 0 THEN price_dis ELSE price_amount END) as price_price
FROM a_price
WHERE
price_visibility = 1 AND price_deleted <> 1
GROUP BY price_id ) pri
ON pri.price_present_id = present_id
LEFT JOIN _present_fotos ON foto_id = present_title_foto
LEFT JOIN _cate_pres ON cp_present = present_id
WHERE present_visibility = 1 AND present_deleted <> 1 AND price_price > 0 AND present_out <> 1 AND cp_category IN (30,31,232,32)
GROUP BY present_id
ORDER BY price_price
LIMIT 8

描述:price_dis是折扣后的价格,price_amount是折扣前的价格。每个产品(当前)都有多个价格。是否有更快的解决方案来选择最终价格?

如果你发现表结构不好,我就有麻烦了:)

非常感谢!

编辑: explain select

最佳答案

好的,我发现有一些可以改进的地方。

首先,您正在连接一个从子查询派生的表 - 对于子查询,MySQL 不使用索引(因此速度会变慢)。不要连接子查询,而是尝试连接表 a_price 本身,并将该 CASE 语句放入原始(父)SELECT 中。它应该允许 MySQL 在 JOINing 时使用索引,当子查询返回许多行时,这一点非常重要。

它应该看起来有点像这样(包括 MIN()GROUP BY,因为您需要最低价格):

SELECT (...), price_amount, price_dis, MIN((CASE WHEN pri.price_dis <> 0 THEN pri.price_dis ELSE pri.price_amount END)) as price_price 
FROM a_present
LEFT JOIN a_price pri
ON pri.price_present_id = present_id AND price_visibility = 1 AND price_deleted <> 1
(...)
GROUP BY present_id

第二点 - 正如 EXPLAIN SELECT 所建议的 - MySQL 不在表 _cate_pres 上使用索引。您应该让它使用索引来 JOIN 并选择您需要的类别(因为您将其中一些类别放入 IN (..) 语句中)。

尝试在 _cate_pres.cp_category 上添加索引,和/或在此表上添加复合索引(使用两列 - cp_category 和 cp_present)。

通常,您想要实现的结果(并不总是可能的,但在您的情况下我很确定它是),是使以下内容从 EXPLAIN SELECT< 中消失:

  • [key] NULL - 这意味着此特定集中没有使用 key
  • [额外] 使用临时表 - 这意味着创建一个临时表来检索结果,这通常会降低性能
  • [额外]使用文件排序 - 这意味着排序时不使用索引,因此排序过程很慢。

了解更多关于indexes in the Mysql docs的信息,请多多关注EXPLAIN output

关于mysql - 优化MySQL查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28233588/

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