Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 对1000个不同的值使用IN子句是否有效?_Mysql_Sql_Select - Fatal编程技术网

Mysql 对1000个不同的值使用IN子句是否有效?

Mysql 对1000个不同的值使用IN子句是否有效?,mysql,sql,select,Mysql,Sql,Select,在我的Java程序中,我需要从MySQL数据库中选择1000行,每行使用不同的WHERE条件。必须通过一个查询检索这些行。为此,我在子句中使用了,如下所示: SELECT * FROM t WHERE (columnA,columnB) IN ((valA1,valB1),(valA2,valB2),(valA3,valB3),...) 它搜索columnA=valA1和columnB=valB1或columnA=valA2和columnB=valB2的行,依此类推 这种方法适用于1000行(

在我的Java程序中,我需要从MySQL数据库中选择1000行,每行使用不同的
WHERE
条件。必须通过一个查询检索这些行。为此,我在子句中使用了
,如下所示:

SELECT * FROM t WHERE (columnA,columnB) IN ((valA1,valB1),(valA2,valB2),(valA3,valB3),...)
它搜索
columnA=valA1和columnB=valB1
columnA=valA2和columnB=valB2
的行,依此类推


这种方法适用于1000行(意味着1000对(valA,valB))有效吗?我一直在寻找一种有效的
批量选择方法,到目前为止,我已经找到了这种方法。

这种方法有效吗?这取决于你在问题中没有解释的因素

但是。如果在
(columnA,columnB)
上有一个索引,并且
in
子句中的
中的所有值都是常量,那么。这是MySQL 8+中提供的新功能


MySQL在
列表中对
中的常量值进行了另一次优化。它对它们进行排序并使用二进制搜索。仍然需要进行表扫描,但二进制搜索使比较速度更快。我不知道MySQL是否已经扩展到处理元组和常量。鉴于人们越来越关注元组优化,如果MySQL也进行这种优化,我也不会感到惊讶。

找到答案的最佳方法是创建一些随机测试数据并进行尝试。如果它对您的用例足够有效,那么您就可以了——否则您可以使用相同的测试数据来尝试其他方法并优化查询。@AndreasFester谢谢您的回答。但我认为你的评论在stackoverflow社区里没有意义。我们在这里分享我们的经验,否则我们可以为每个问题投入大量的时间,并自己找到最终的答案!也许将这个条件数组存储在临时引擎=内存索引表中会有所改进。@soheil这就是我所做的-分享我的经验。如果我们不知道任何指标,我们如何知道您的方法是否足够“有效”?根据您的用例,运行两小时的查询可能仍然可以,而另一个用例可能要求查询只需要几毫秒。我删除了java和jdbc标记,因为您的问题似乎仅限于MySQL