sql 代替 in

sql语句:select*fromtableAwhereagein(1,2,6,9)1,2,6,9是定死了的.不是子查询查出来的.是不会改变的.请问有没有效率更高点的办法... sql语句: select * from tableA where age in (1,2,6,9)
1,2,6,9是定死了的. 不是子查询查出来的 .是不会改变的.
请问有没有效率更高点的办法呀 效率太低了..
展开
 我来答
百度网友19c5533fd
推荐于2017-09-10 · TA获得超过2389个赞
知道小有建树答主
回答量:465
采纳率:0%
帮助的人:622万
展开全部
--可试试:
select * from tableA where age = 1
union all
select * from tableA where age = 2
union all
select * from tableA where age = 6
union all
select * from tableA where age = 9
;

思路:
1.避免用in,分开来查,再用union all .
2.实际效率取决于表的实际情况:数据量,索引等。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mwtcz
2010-07-09 · TA获得超过1322个赞
知道小有建树答主
回答量:1367
采纳率:50%
帮助的人:1023万
展开全部
分别查询然后再用union all的方式当然可以。不过你这样写也没什么大问题。完全的避免 in 操作,有点太学究了,书上和资料讲的,不一定全对,至少不一定适合所有的场景。

我试过3,50万条数据,用in,也慢不到哪儿去,为了提高0.00001%的性能,搞出一个复杂的算法来,真是没必要。

你还是用执行计划分析分析,这个查询的问题吧。如果在age上有索引,效率应该没什么问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
feixianxxx
2010-07-09 · TA获得超过2202个赞
知道大有可为答主
回答量:1273
采纳率:100%
帮助的人:1749万
展开全部
用我这个吧
select a.*
from tableA a join (select 1 as col union seldect 2 union select 6 union select 9 ) b on a.age = b.col

然后再age 上加索引

这样应该快很多
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
名要长长长长长
2010-07-08 · TA获得超过162个赞
知道小有建树答主
回答量:245
采纳率:0%
帮助的人:73.8万
展开全部
1 select * from tableA where age=1 or age=2 or age=6 or age-9;
2 exists对你这个可能不太适用。exists比in要高效。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式