我有一个SQL查询,它在WHERE子句中使用数组的值:
$ids = array
(
[0] => 1
[1] => 2
[2] => 5
)
$ids = join(',',$ids);
$sql = "SELECT * FROM cats WHERE id IN ($ids)";
我的问题是有多少ID太多了?
它会影响速度吗?
全部谢谢
答案 0 :(得分:5)
Oracle的限制为1000,这是我之前遇到的。 MySQL似乎并不介意。最好的解决方案是不要为那个大的数据集使用IN子句。 ID来自何处?如果来自同一个数据库,那么看看您是否可以使用子查询代替基于一个参数进行搜索,例如userid查找链接的ID。由于MySQL可以使用索引在内部进行连接,因此效率会高得多。
答案 1 :(得分:4)
您选择的数据越多,所需的时间就越长,但主要关注的不应该是您选择的ID数量。相反,您应该确保您的ID上有INDEX
或者PRIMARY KEY
。无论您抓到多少ID,这都会使查找变得快速。
答案 2 :(得分:0)
您放入IN
的值越多,显然会越慢。
“多少太多”是许多因素的函数。例如,您的数据集大小。或者你的查询的其余部分是什么样的。
答案 3 :(得分:0)
想想..如果你需要写5页或10页需要更长的时间...如果你有大量的ID可以延长查询时间是正常的。你应该查看并确保你的数据没有重复,因为这将使查询花费更长时间来处理不必要的数据..