首页 > 解决方案 > 如何解决大量数据的 IN 子句 SQL 查询中的性能问题?

问题描述

我正在尝试从大量数据中进行查询。查询继续运行,没有任何结果或错误。我为一小组测试数据运行的相同查询工作正常。

询问:

> SELECT * FROM table1 t1 WHERE t1.col1 IN (SELECT distinct(t2.col2)
> FROM table2 t2 Left Join table3 t3 on t2.col1 = t3.col1  WHERE
> t3.col1=value);

我再次尝试使用

SELECT * FROM table1 t1 WHERE t1.col1 = (raw_value);- 单值过滤器工作正常。

SELECT * FROM table1 t1 WHERE t1.col1 IN ( raw_value, raw_value);- 一个以上的值过滤器会产生性能问题。

请给我建议以提高性能。

-谢谢你。

标签: mysqlsqljoinmysql-workbenchquery-optimization

解决方案


据我所见,left join不需要子查询中的 ,因为过滤器位于用于on条件的同一列上:如果是这样,只需将其删除。我建议使用以下语句来表达查询exists

select t1.*
from table1 t1
where exists (select 1 from table2 t2 on t2.col2 = t1.col1 and t2.col1 = value)

出于性能考虑,您需要在table2(col1, value). 上的索引table1(col1)也可能有所帮助。


推荐阅读