gpt4 book ai didi

mysql with OR 语句返回全表扫描

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

所以我有这个问题

SELECT
*
FROM table1 i
LEFT JOIN table2 k
ON k.field1 = i.field2
WHERE k.field3 IN
(632569, 658869, 1253996, 2112571, 164715, 165082, 658665, 180550, 323455, 165579, 164665, 282091, 164605, 164714, 626888, 165277, 164196)
OR i.field2
IN
(632569, 658869, 1253996, 2112571, 164715, 165082, 658665, 180550, 323455, 165579, 164665, 282091, 164605, 164714, 626888, 165277, 164196);

解释会显示它正在对表 1 (i) 执行全表扫描。有没有办法修改查询,使其不会进行全表扫描?

我知道我可以将它拆分为 2 并使用联合,但我宁愿不这样做,因为我的实际查询比这大得多,所以请建议替代方法。

最佳答案

SELECT
*
FROM table1 i
LEFT JOIN table2 k
ON k.field1 = i.field2 AND k.field3 IN
(632569, 658869, 1253996, 2112571, 164715, 165082, 658665, 180550, 323455, 165579, 164665, 282091, 164605, 164714, 626888, 165277, 164196)
OR i.field2 IN
(632569, 658869, 1253996, 2112571, 164715, 165082, 658665, 180550, 323455, 165579, 164665, 282091, 164605, 164714, 626888, 165277, 164196);

尝试在 ON 子句而不是 WHERE 中指定您的条件。如果 JOIN 列上还没有索引,还要在它们上添加索引。结束语,全表扫描并不总是最糟糕的选择。

ALTER TABLE Table2 ADD INDEX (field1 , field3 );

这也可能会加快速度。

关于mysql with OR 语句返回全表扫描,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19280838/

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