0

我在 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
       )
";
4

3 回答 3

1

是的,它会(你可以自己尝试而不用在这里问)。sql 查询字符串没有合理的限制。

但是你应该记住你添加的 id 越多 - 查询越慢

PS:您可能感兴趣的唯一 mysql 设置是max_allowed_packet. 据我所知,它是唯一可能给超大查询带来一些问题的参数

于 2012-07-02T05:31:12.910 回答
0

我知道 MySQL 中的 IN 子句没有限制,你可以写任意多的 id。同意 zerkms 关于性能和max_allowed_packet变量的看法。

作为一种解决方法 - 尝试使用您的值索引来填充另一个表(可能是临时表)id,然后使用 JOIN 子句来查找这两个表。

于 2012-07-02T06:56:29.253 回答
0

AFAIK 限制为 NOT IN 的 1024 个字符。如果您使用子选择,则没有限制。您可以使用 id 填充内存表,在查询中使用子选择获取它们,然后删除内存表。这甚至可能更快。

于 2014-07-01T06:51:57.877 回答