[英]Optimization query (MySQL)
products(prodId, Hide) cat_binds(prodId,SptPath) params(paramId,prodId,langId,value)
SELECT DISTINCT(params.value) FROM products, cat_binds, params WHERE products.prodId = params.prodId AND params.paramId = '1' AND params.langId = '1' AND products.prodId = cat_binds.prodId AND cat_binds.SptPath LIKE '-2147483644\_%' AND products.Hide = '0'
如何优化此查询? 如何创建正确的索引以生成较少的结果行。
感谢帮助
使用联接而不是获取不需要的行的笛卡尔。
SELECT DISTINCT
(params.value)
FROM products
LEFT JOIN cat_binds
ON cat_binds.prodId = products.prodId
LEFT JOIN params
ON params.prodId = products.prodId
WHERE params.paramId = '1'
AND params.langId = '1'
AND cat_binds.SptPath LIKE '-2147483644\_%'
AND products.Hide = '0'
您的SQL看起来不错,如果您在所有ID字段上添加了主索引,我认为它会很好。 MySQL还将在内部进行优化以使顺序正确。 我只关心包含LIKE表达式的WHERE条件。 由于您在最后使用'%'条件,因此我认为在此列中添加索引会有所帮助,但是如果您将'%'放在前面,则索引不会有太大影响
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.