我在NOT in语句中有超过400,000个id。它是否会执行?
$query = "
SELECT
*
FROM
table_name
WHERE
my_field_id NOT IN(
34535345,3453451234,234242345,3465465,12234234,23435465,122343,345435,3453454,
34535345,3453451234,234242345,3465465,12234234,23435465,122343,345435,3453454,
34535345,3453451234,234242345,3465465,12234234,23435465,122343,345435,3453454,
34535345,3453451234,234242345,3465465,12234234,23435465,122343,345435,3453454,
34535345,3453451234,234242345,3465465,12234234,23435465,122343,345435,3453454,
34535345,3453451234,234242345,3465465,12234234,23435465,122343,345435,3453454
)
";发布于 2012-07-02 13:31:13
是的,它会的(你可以自己试一试,实际上不需要在这里问)。sql查询字符串没有合理的限制。
但您应该记住,添加的in越多,查询速度就越慢
PS:您可能唯一感兴趣的mysql设置是max_allowed_packet。据我所知,它是唯一一个可能在超大查询中带来问题的参数
发布于 2012-07-02 14:56:29
据我所知,MySQL中的IN子句没有限制,您可以根据需要编写任意数量的id。在性能和max_allowed_packet变量方面与zerkms意见一致。
作为一种解决办法-尝试用您的值填充另一个表(可能是临时的),然后使用id子句读取这两个表。
发布于 2014-07-01 14:51:58
AFAIK NOT IN的限制为1024个字符。如果使用子选择,则没有限制。您可以用id填充内存表,在查询中使用子select获取它们,然后删除内存表。这可能会更快。
https://stackoverflow.com/questions/11288176
复制相似问题