社区
基础编程
帖子详情
sql语句中当条件的数量非常大时where...in条件子句用什么更好的方法代替?
卿柠
2012-07-17 01:43:06
当sql语句中的where条件是where id in(1,2,3,4,8,11,23,56,89,110,...),即当in的数量相当大时,这种sql语句是很劣质的,那么用什么其它更好的方法解决这样的问题呢?
...全文
34763
21
打赏
收藏
sql语句中当条件的数量非常大时where...in条件子句用什么更好的方法代替?
当sql语句中的where条件是where id in(1,2,3,4,8,11,23,56,89,110,...),即当in的数量相当大时,这种sql语句是很劣质的,那么用什么其它更好的方法解决这样的问题呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
21 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
helloyou0
2012-08-16
打赏
举报
回复
到底是咋样的情况啊...
[Quote=引用 20 楼 的回复:]
今天偶也遇到这问题了,in中的数据少则几万,多则几十到几百万不等,“效率”很大的问题呀 唉。。。。
[/Quote]
kugouming
2012-08-15
打赏
举报
回复
今天偶也遇到这问题了,in中的数据少则几万,多则几十到几百万不等,“效率”很大的问题呀 唉。。。。
yunprince
2012-07-18
打赏
举报
回复
[Quote=引用 16 楼 的回复:]
引用 5 楼 的回复:
能告诉我你列表中的id是怎么来的吗?
我觉得这才是问题的要点。如果可能的话,把当初获得这一组id的sql语句跟后面要实现的sql语句结合起来做关联查询。
如果这一组id不是用某个sql语句得到的,那恐怕要重新考察一下业务需求和实现方案了,真的需要对这么大的一组“没来由”的id进行批量处理吗?
———————————————————————————……
[/Quote]
接着楼主提个问,嘿嘿
没测试过,你的意思是联合查询比where in 更好?
maquan
2012-07-18
打赏
举报
回复
[Quote=引用 5 楼 的回复:]
能告诉我你列表中的id是怎么来的吗?
[/Quote]
我觉得这才是问题的要点。如果可能的话,把当初获得这一组id的sql语句跟后面要实现的sql语句结合起来做关联查询。
如果这一组id不是用某个sql语句得到的,那恐怕要重新考察一下业务需求和实现方案了,真的需要对这么大的一组“没来由”的id进行批量处理吗?
————————————————————————————————
基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,
分享
给大家,欢迎
技术交流
:)
cangzhu
2012-07-18
打赏
举报
回复
[Quote=引用 14 楼 的回复:]
同意楼上,仅几个,几十个(甚至几百个)的 IN ID 效率低不到哪去。不然你还有什么好办法。
[/Quote]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
helloyou0
2012-07-18
打赏
举报
回复
嘿嘿, 没看我上面贴的blog吧...那是插入临时表再join查询...数据大的情况比in快.
[Quote=引用 17 楼 的回复:]
引用 16 楼 的回复:
引用 5 楼 的回复:
能告诉我你列表中的id是怎么来的吗?
我觉得这才是问题的要点。如果可能的话,把当初获得这一组id的sql语句跟后面要实现的sql语句结合起来做关联查询。
如果这一组id不是用某个sql语句得到的,那恐怕要重新考察一下业务需求和实现方案了,真的需要对这么大的一组“没来由”的id进行批量处理吗?
——————————……
[/Quote]
yiwusuo
2012-07-18
打赏
举报
回复
同意楼上,仅几个,几十个(甚至几百个)的 IN ID 效率低不到哪去。不然你还有什么好办法。
maquan
2012-07-18
打赏
举报
回复
[Quote=引用 17 楼 的回复:]
没测试过,你的意思是联合查询比where in 更好?
[/Quote]
要看具体情况。一般来说,如果 in list 是一个比较小的常量集合的时候,in 的效率还是很好的,但当 in list 比较大的时候(比如超过 1000 以后),效率就会变差了,这时候很可能就是关联查询效率更高了。
helloyou0
2012-07-17
打赏
举报
回复
有兴趣的话可以看这个blog
http://explainextended.com/2009/08/18/passing-parameters-in-mysql-in-list-vs-temporary-table/
不过,就如blog结尾所说,只有在数量比较大的情况下才能看出明显效果.
如果你的id就那么几个,几十个...我不认为需要考虑这点差别.
1,2楼分开查询的方法我认为不可取, 因为mysql内部的处理大概也不会比那样更差吧...
[Quote=引用楼主 的回复:]
当sql语句中的where条件是where id in(1,2,3,4,8,11,23,56,89,110,...),即当in的数量相当大时,这种sql语句是很劣质的,那么用什么其它更好的方法解决这样的问题呢?
[/Quote]
OWJ-Think
2012-07-17
打赏
举报
回复
[Quote=引用 11 楼 的回复:]
或者是遍历传入的 id 组,在循环里逐一查询,更明智点?
[/Quote]
就看LZ 到底Where 来干什么的. 是更新,删除还是怎么的.再说吧
xuzuning
2012-07-17
打赏
举报
回复
或者是遍历传入的 id 组,在循环里逐一查询,更明智点?
卿柠
2012-07-17
打赏
举报
回复
[Quote=引用 7 楼 的回复:]
那就不是 sql语句很劣质的 的问题了,既然你允许传入一万个 id 值,那么为什么要说包含这一万个 id 值得 in 子句是劣质的呢?
[/Quote]
对,我应该学会咬文嚼字,不能说劣质,只能说我在这里这样用in是很脑残的!
xuzuning
2012-07-17
打赏
举报
回复
那么你认为把传入的 id 组先存入表,然后再关联查询是否更明智呢?
卿柠
2012-07-17
打赏
举报
回复
[Quote=引用 5 楼 的回复:]
能告诉我你列表中的id是怎么来的吗?
[/Quote]
$sql = 'select * from table where id in(' . $id . ')';
$id 的值是多个的,当它的值是一个很庞大的数目时,用in显然是很不明智的,求高手妙方!!!
xuzuning
2012-07-17
打赏
举报
回复
那就不是 sql语句很劣质的 的问题了,既然你允许传入一万个 id 值,那么为什么要说包含这一万个 id 值得 in 子句是劣质的呢?
卿柠
2012-07-17
打赏
举报
回复
[Quote=引用 5 楼 的回复:]
能告诉我你列表中的id是怎么来的吗?
[/Quote]
传值过来的
xuzuning
2012-07-17
打赏
举报
回复
能告诉我你列表中的id是怎么来的吗?
卿柠
2012-07-17
打赏
举报
回复
[Quote=引用 2 楼 的回复:]
select * from x where id=1 union all select * from x where id=2 union all ...
[/Quote]
就这样一直写下去吗?
一起混吧
2012-07-17
打赏
举报
回复
这个就不错了。
littlebirds
2012-07-17
打赏
举报
回复
select * from x where id=1 union all select * from x where id=2 union all ...
加载更多回复(1)
SQL语句
WHERE
子句
中的运算符
SQL WHERE
子句
:用于过滤记录,WHERE
子句
用于提取满足
条件
的记录 类型 解释 = 等于 <> 不等于(也可以是 != ) > 大于 < 小于 >= 大于等于 <= 小于等于 BETWEEN 在某个范围内 ...
深入了解 SQL 中的
条件
查询:WHERE
子句
本文将深入探讨 SQL 中的 WHERE
子句
,包括语法、常见的比较运算符和逻辑运算符,以及一些示例演示如何使用 WHERE
子句
进行
条件
查询。通过本文的介绍,我们了解了 SQL 中的
条件
查询(WHERE)语句的基本用法和常见...
sql语句
之where
子句
sql语句
之where
子句
,在数据库中查询数据时,有时只希望查询所需要的数据,而非数据表中的所有数据,那么就可以使用SELECT语句中的WHERE
子句
来实现。 在数据库中查询数据时,有时只希望查询所需要的数据,而非...
SQL入门之第四讲——SELECT查询语句之WHERE
条件
子句
在查询数据过程中,需要特定查询出一些数据,那么就需要WHERE
子句
了。 常用的查询
条件
: 1.比较运算符 2.AND,OR运算符 3.IN运算符 4.BETWEEN运算符 5.LIKE运算符 6.IS NULL 运算符 7.REGEXP正则表达式 WHERE
条件
...
说说对
SQL语句
优化有哪些
方法
?
(1)Where
子句
中:where表之间的连接必须写在其他Where
条件
之前,那些可以过滤掉最大
数量
记录的
条件
必须写在Where
子句
的末尾.HAVING最后。 (2)用EXISTS替代IN、用NOT EXISTS替代NOT IN。 (3) 避免在...
基础编程
21,886
社区成员
140,364
社区内容
发帖
与我相关
我的任务
基础编程
从PHP安装配置,PHP入门,PHP基础到PHP应用
复制链接
扫一扫
分享
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章