mysql - 如何解决大量数据的 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);
- 一个以上的值过滤器会产生性能问题。
请给我建议以提高性能。
-谢谢你。
解决方案
据我所见,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)
也可能有所帮助。
推荐阅读
- android - 如何管理多个首选项集?
- node.js - 如何在 Node.js 中检查 CAS 身份验证?
- python - 2019:动态 cron 作业 Google App Engine
- php - Magento 2 安装设置 - 空白页
- ruby-on-rails - 向 DB 迁移添加列:条目未显示在 SHOW 视图中
- selenium-webdriver - 如何编写脚本来验证文本中的数字?例如:我喜欢从字段“状态(2)”中获取数值“2”
- swift - 核心数据对象被写入,但从未读取
- twilio - twilio 功能是否涵盖了 twilio 电话会议应用程序的基本用例?
- javascript - 来自 MVC.Grid 的模态视图(部分)
- jquery - 输入新搜索时无法清除搜索结果