sql server的查询原理是什么?

chenwei175528 2011-01-19 04:45:30
比如说
select * from table where id in (1,3,2)---注意这里的顺序

id是主键

数据库里数据
id desc
1 1
2 2
3 3

这时候用上面的语句返回结果是
id desc
1 1
2 2
3 3
这个原因我懂,是因为id是主键,也就是唯一索引,所以是排序的,所以返回值也就是排序的

但是in的实现机理是什么?
我能猜到的
1、先对in里的值进行排序,然后一个一个去数据库取值
2、先用in里的值一个一个去数据库取值,然后返回结果再排序

或者是其他的? 谁给我解释一下,谢了


...全文
279 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ddecma 2011-01-21
  • 打赏
  • 举报
回复
in 是全表扫描的,是遍历
chenwei175528 2011-01-20
  • 打赏
  • 举报
回复
我只想试试三连发
chenwei175528 2011-01-20
  • 打赏
  • 举报
回复
我只想试试三连发
chenwei175528 2011-01-20
  • 打赏
  • 举报
回复
我只想试试三连发
andy_dyg 2011-01-20
  • 打赏
  • 举报
回复
没人回答呢,,
select * from table where id in (1,3,2)
能不能让查询结果,根据 id in(1,3,2) 括号中的顺序,显示出来呢。。

结果也就是1,3,2之类的、
andy_dyg 2011-01-20
  • 打赏
  • 举报
回复
楼主这个问题问的好啊,学习呢。。
xiaoyehua 2011-01-20
  • 打赏
  • 举报
回复
我是来积累的!最近混在SQL版
chenwei175528 2011-01-20
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 fcu 的回复:]

in 里是个结果集,然后逐个遍历 外布的数据集去遍历 in里的数据集
相当于两个FOR循环嵌套吧
----
in的效率很低
[/Quote]

呃。。。
感觉应该不会是遍历吧?
因为有索引,至少也是个对半查找啊
FCU 2011-01-20
  • 打赏
  • 举报
回复
in 里是个结果集,然后逐个遍历 外布的数据集去遍历 in里的数据集
相当于两个FOR循环嵌套吧
----
in的效率很低
chenwei175528 2011-01-20
  • 打赏
  • 举报
回复
呃。。。
我说的再明白点
select
*
from Strain
where id in (1,2,3)
数据库查询的时候用的是什么算法实现的?
violetkenneth 2011-01-20
  • 打赏
  • 举报
回复
没关系,
这个只能对应几条数据好用,太多了话就不好用了。这个只是对应ID进行了一次判断而已。
violetkenneth 2011-01-20
  • 打赏
  • 举报
回复
select
*
from Strain
where id in (1,2,3)
order by
case when id=1 then 1
when id=3 then 2
when id=2 then 3
end
'in'后面可以顺写ID号。
yy1987316 2011-01-20
  • 打赏
  • 举报
回复
where id in (1,3,2)
等同于
where id=1 or id=3 or id=2

跟排序有什么关系呢?
violetkenneth 2011-01-20
  • 打赏
  • 举报
回复
select * from '表名' where id in (1,3,2) order by case when id=1 then 1 when id=3 then 2 when id=2 then 3 end
这个能实现你的问题
chenwei175528 2011-01-20
  • 打赏
  • 举报
回复
解释。。。
chenwei175528 2011-01-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 dawugui 的回复:]

1.先用in里的值一个一个去数据库取值
2.然后返回结果.
3.至于排序则需要根据你的排序规则来定,也有可能不排序.
[/Quote]

刚才试了下,如果不排序的话 用的是默认的唯一索引排序
是不是就是说
先取id=1,再取id=3,然后取id=2
然后返回结果根据id做唯一索引的排序
所以得到那个结果?
dawugui 2011-01-19
  • 打赏
  • 举报
回复
1.先用in里的值一个一个去数据库取值
2.然后返回结果.
3.至于排序则需要根据你的排序规则来定,也有可能不排序.

abuying 2011-01-19
  • 打赏
  • 举报
回复
in 中其实是个结果集!
Shawn 2011-01-19
  • 打赏
  • 举报
回复
IN的实质就是无数个=,中间用OR连接起来
比如IN (1,2,3)实质上就是=1 or =2 or =3,效率自然不高
这样相当于对字段多条件,进行了全表扫描 效率低
快溜 2011-01-19
  • 打赏
  • 举报
回复
加载更多回复(1)

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧