gpt4 book ai didi

mysql - 选择计数索引

转载 作者:行者123 更新时间:2023-11-30 22:56:44 28 4
gpt4 key购买 nike

我是 MySQL 数据库优化的新手。

我的查询速度很慢:

   SELECT COUNT(DISTINCT p.product_id) AS total 
FROM shs_product p
LEFT JOIN shs_product_description pd
ON (p.product_id = pd.product_id)
LEFT JOIN shs_product_to_store p2s
ON (p.product_id = p2s.product_id)
LEFT JOIN shs_product_to_category p2c
ON (p.product_id = p2c.product_id)
WHERE pd.language_id = '1'
AND p.status = '1'
AND p.date_available <= NOW()
AND p2s.store_id = '$

任何人都可以就创建索引的操作提出建议以加速此查询吗?您会推荐哪个表和哪个列?

任何帮助将不胜感激......

最佳答案

三个观察:

  1. where 子句正在撤消到 p2spd 的外部连接。因此,您不妨称这些为内部联接。
  2. 未使用p2c 表。因为您正在执行 count(distinct) 您可以将其删除。
  3. 据推测,id 是整数,因此您不需要引号

所以,查询是等价的

SELECT COUNT(DISTINCT p.product_id) AS total 
FROM shs_product p JOIN
shs_product_description pd
ON p.product_id = pd.product_id JOIN
shs_product_to_store p2s
ON p.product_id = p2s.product_id
WHERE pd.language_id = 1 AND p.status = 1 AND p.date_available <= NOW() AND
p2s.store_id = '$'

对于此查询,您需要在 shs_product(status, date_available) 上建立索引。您还需要在用于连接的列和 where 子句中建立索引。我建议:shs_product_description(product_id, language_id)shs_product_to_store(product_id, store_id)

最后,假设 product_idproduct 中的唯一索引,您可以使用 existscount(* ) 而不是 count(distinct):

select count(*)
from shs_product p
where p.status = 1 AND p.date_available <= NOW() and
exists (select 1
from shs_product_description pd
where p.product_id = pd.product_id and pd.language_id = 1
) and
exists (select 1
from shs_product_to_store p2s
where p.product_id = p2s.product_id and p2s.store_id = '$'
);

关于mysql - 选择计数索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26049501/

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