0
有没有什么办法可以加快以下MySQL
的查询?通过用JOIN或其他方式替换IN()子句来加速MySQL查询?
SELECT prop1, count(prop2) AS num_of_products FROM products
WHERE insdate > CURDATE() AND
basecat='319' AND
prop2 NOT IN(SELECT number1 FROM categories WHERE basecat='319') AND
prop2 like '______%%' AND
accountcode IN(427,428,432,434,438,441,445,451,459,461)
GROUP BY prop1;
目前性能杀手是IN()
子句中的子查询:
prop2 NOT IN(SELECT number1 FROM categories WHERE basecat='319')
我已经尽我的运气JOINS
:
SELECT prop1, count(prop2) AS num_of_products FROM (
SELECT DISTINCT t_a.prop1, t_a.prop2 FROM products t_a
LEFT JOIN categories t_b
ON t_a.prop2 != t_b.number1
WHERE t_a.insdate > CURDATE() AND
t_a.basecat ='319' AND
t_a.prop2 like '______%%' AND
t_a.accountcode IN(427,428,432,434,438,441,445,451,459,461)
) tmp_q
WHERE prop1 IN(427,428,432,434,438,441,445,451,459,461)
GROUP BY prop1;
这一个是〜17X更快,但它会产生不准确的结果,因为初始测试prop2 NOT IN(subquery)
并不等同于t_a.prop2 != t_b.number1
。
是否有任何其他方式以更智能的方式查询数据库?
非常感谢,您的解决方案提供了〜23倍的性能提升O_o。我编辑了你的答案以匹配我想要的结果。 –