首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL查询长度

MySQL查询长度
EN

Stack Overflow用户
提问于 2012-07-02 13:29:26
回答 3查看 638关注 0票数 0

我在NOT in语句中有超过400,000个id。它是否会执行?

代码语言:javascript
复制
$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
       )
";
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-02 13:31:13

是的,它会的(你可以自己试一试,实际上不需要在这里问)。sql查询字符串没有合理的限制。

但您应该记住,添加的in越多,查询速度就越慢

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

票数 1
EN

Stack Overflow用户

发布于 2012-07-02 14:56:29

据我所知,MySQL中的IN子句没有限制,您可以根据需要编写任意数量的id。在性能和max_allowed_packet变量方面与zerkms意见一致。

作为一种解决办法-尝试用您的值填充另一个表(可能是临时的),然后使用id子句读取这两个表。

票数 0
EN

Stack Overflow用户

发布于 2014-07-01 14:51:58

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11288176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档