为了账号安全,请及时绑定邮箱和手机立即绑定

MySQL“in clause”中的项目数

MySQL“in clause”中的项目数

Helenr 2019-09-02 16:15:59
我有三个表来定义用户:USER: user_id (int), username (varchar)USER_METADATA_FIELD: user_metadata_field_id (int), field_name (varchar)USER_METADATA: user_metadata_field_id (int), user_id (int), field_value (varchar)我想创建一个中间层用户,该用户可以访问应用程序中的其他用户。要确定登录使用的用户可以访问哪些用户,我使用如下的子查询:SELECT user_id FROM user WHERE user_id      IN (SELECT user_id          FROM user_metadata          WHERE user_metadata_field_id = 1 AND field_value = 'foo')目前,我将子查询字符串存储在变量中,然后在每次需要提取用户列表时将其动态插入到外部查询中。在这样做之后,我想,“只需存储一串实际的user_ids 就更好了”。所以不要将其存储在变量中......$subSql = "SELECT user_id FROM user_metadata WHERE user_metadata_field_id = 1 AND field_value = 'foo'";...我实际执行查询并存储结果,如...$subSql = "12, 56, 89, 100, 1234, 890";然后当我需要拉出登录用户可以访问的点亮用户时,我可以这样做:$sql = "SELECT user_id FROM user WHERE user_id IN ($subSql)";最后问题是:您可以在MySQL INCLAUSE中使用多少项?存储实际的id而不是sub-sql语句每次执行外部查询必须更快,对吧?
查看完整描述

3 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

从一定数量开始,IN表格更快。

MySQL 在其代码中有一些东西使得在大量常量值上构建范围比在嵌套循环中执行相同操作更慢。

有关性能详情,请参阅我的博客中的这篇文章

  • 在MySQL中传递参数:IN列表与临时表


查看完整回答
反对 回复 2019-09-02
?
慕姐4208626

TA贡献1852条经验 获得超7个赞

从手册:


IN列表中的值数量仅受max_allowed_packet值限制。


查看完整回答
反对 回复 2019-09-02
  • 3 回答
  • 0 关注
  • 696 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信