如题,字段A是聚集索引,那么我用A in ()这样的语句时,到底用不用索引.
还有用A not in ()时用不用索引?
好多材料上都说不用,但是我从MSSQL的执行计划上看到用索引,谁能说下.
21 个解决方案
#1
没试过
记得是不用的
记得是不用的
#2
可是执行计划中显示聚集索引的.
#3
等等等等..........
#4
A in ()有两种形式
A in (x,y,z) 是用到索引的
A in (子查询) 是用不到索引的,但是如果子查询的条件是和外层相关的,子查询本身用到索引
A in (x,y,z) 是用到索引的
A in (子查询) 是用不到索引的,但是如果子查询的条件是和外层相关的,子查询本身用到索引
#5
实际上:
A in (x,y,z)
查询分析器自动按照
select ...
a=x
union
select ...
a=y
union
select ...
a=z
执行,当然用到索引
A not in (x,y,z)
查询分析器自动按照
select ...
a<>x and a<>y and a<>z
执行,也会用到索引
A in (x,y,z)
查询分析器自动按照
select ...
a=x
union
select ...
a=y
union
select ...
a=z
执行,当然用到索引
A not in (x,y,z)
查询分析器自动按照
select ...
a<>x and a<>y and a<>z
执行,也会用到索引
#6
TO tx1icenhe(冒牌马可 V0.3)
如select * from tablea where id in(select id from tableb)
我看了下执行计划,tablea中的id也用索引,和你说的不一致
如select * from tablea where id in(select id from tableb)
我看了下执行计划,tablea中的id也用索引,和你说的不一致
#7
关注,个人感觉not in是用不到索引的,in有时可以用到
#8
學習...
#9
可能跟统计等有关,Sql Server会从选择度等因素来判断用不用索引.
#10
没有人说个准点的吗?
#11
以执行计划里看到的为准!
A in ()有两种形式
A in (x,y,z) 是用到索引的
A in (子查询) 是用不到索引的,但是如果子查询的条件是和外层相关的,子查询本身用到索引
这个正确。
A in ()有两种形式
A in (x,y,z) 是用到索引的
A in (子查询) 是用不到索引的,但是如果子查询的条件是和外层相关的,子查询本身用到索引
这个正确。
#12
A in (子查询) 是用不到索引的,但是如果子查询的条件是和外层相关的,子查询本身用到索引
这句话不理解.
select * form table_a where id in (select id from table_a where id in (1,2))
这个从执行计划看都用索引.
这句话不理解.
select * form table_a where id in (select id from table_a where id in (1,2))
这个从执行计划看都用索引.
#13
in 可以用索引,可以不用索引,视情况而定。
#14
To:allright_flash
那不用的情况说说看.
那不用的情况说说看.
#15
sql中非子查询是用到索引的
子查询是用不到索引的,但是如果子查询的条件是和外层相关的,子查询本身用到索引
子查询是用不到索引的,但是如果子查询的条件是和外层相关的,子查询本身用到索引
#16
子查询是用不到索引的,但是如果子查询的条件是和外层相关的,子查询本身用到索引
这句话不理解,能不能举个sql语句说说啊,谢谢.
这句话不理解,能不能举个sql语句说说啊,谢谢.
#17
现在可以确定:
IN(值列表)肯定用索引.
IN(子查询)这个还不清楚。
“子查询是用不到索引的,但是如果子查询的条件是和外层相关的,子查询本身用到索引
”怎么理解?谁给说下,说完给分结贴。
IN(值列表)肯定用索引.
IN(子查询)这个还不清楚。
“子查询是用不到索引的,但是如果子查询的条件是和外层相关的,子查询本身用到索引
”怎么理解?谁给说下,说完给分结贴。
#18
现在可以确定:
IN(值列表)肯定用索引.
IN(子查询)这个还不清楚。
“子查询是用不到索引的,但是如果子查询的条件是和外层相关的,子查询本身用到索引
”怎么理解?谁给写个SQL示例说下,说完给分结贴。
IN(值列表)肯定用索引.
IN(子查询)这个还不清楚。
“子查询是用不到索引的,但是如果子查询的条件是和外层相关的,子查询本身用到索引
”怎么理解?谁给写个SQL示例说下,说完给分结贴。
#19
IN 里面的如果是字段值,并且建的索引上有这个值,是会用的。
反向查询一定不用。 像NOT IN 这种。
#20
IN 在一定情况下,和OR有些相似。
#21
TO : superunusa(迷失方向的蚂蚁)
create table #T
(id int identity(1,1) primary key,userid varchar(20))
insert into #T select 'aa'
insert into #T select 'bb'
insert into #T select 'cc'
insert into #T select 'dd'
insert into #T select 'ee'
insert into #T select 'ff'
--set showplan_all on
select * from #T where id not in (3)
从执行计划上看,MSSQL将此句优化成:
select * from #T where id<3 or id>3
这难道不是在使用索引吗?
create table #T
(id int identity(1,1) primary key,userid varchar(20))
insert into #T select 'aa'
insert into #T select 'bb'
insert into #T select 'cc'
insert into #T select 'dd'
insert into #T select 'ee'
insert into #T select 'ff'
--set showplan_all on
select * from #T where id not in (3)
从执行计划上看,MSSQL将此句优化成:
select * from #T where id<3 or id>3
这难道不是在使用索引吗?
#1
没试过
记得是不用的
记得是不用的
#2
可是执行计划中显示聚集索引的.
#3
等等等等..........
#4
A in ()有两种形式
A in (x,y,z) 是用到索引的
A in (子查询) 是用不到索引的,但是如果子查询的条件是和外层相关的,子查询本身用到索引
A in (x,y,z) 是用到索引的
A in (子查询) 是用不到索引的,但是如果子查询的条件是和外层相关的,子查询本身用到索引
#5
实际上:
A in (x,y,z)
查询分析器自动按照
select ...
a=x
union
select ...
a=y
union
select ...
a=z
执行,当然用到索引
A not in (x,y,z)
查询分析器自动按照
select ...
a<>x and a<>y and a<>z
执行,也会用到索引
A in (x,y,z)
查询分析器自动按照
select ...
a=x
union
select ...
a=y
union
select ...
a=z
执行,当然用到索引
A not in (x,y,z)
查询分析器自动按照
select ...
a<>x and a<>y and a<>z
执行,也会用到索引
#6
TO tx1icenhe(冒牌马可 V0.3)
如select * from tablea where id in(select id from tableb)
我看了下执行计划,tablea中的id也用索引,和你说的不一致
如select * from tablea where id in(select id from tableb)
我看了下执行计划,tablea中的id也用索引,和你说的不一致
#7
关注,个人感觉not in是用不到索引的,in有时可以用到
#8
學習...
#9
可能跟统计等有关,Sql Server会从选择度等因素来判断用不用索引.
#10
没有人说个准点的吗?
#11
以执行计划里看到的为准!
A in ()有两种形式
A in (x,y,z) 是用到索引的
A in (子查询) 是用不到索引的,但是如果子查询的条件是和外层相关的,子查询本身用到索引
这个正确。
A in ()有两种形式
A in (x,y,z) 是用到索引的
A in (子查询) 是用不到索引的,但是如果子查询的条件是和外层相关的,子查询本身用到索引
这个正确。
#12
A in (子查询) 是用不到索引的,但是如果子查询的条件是和外层相关的,子查询本身用到索引
这句话不理解.
select * form table_a where id in (select id from table_a where id in (1,2))
这个从执行计划看都用索引.
这句话不理解.
select * form table_a where id in (select id from table_a where id in (1,2))
这个从执行计划看都用索引.
#13
in 可以用索引,可以不用索引,视情况而定。
#14
To:allright_flash
那不用的情况说说看.
那不用的情况说说看.
#15
sql中非子查询是用到索引的
子查询是用不到索引的,但是如果子查询的条件是和外层相关的,子查询本身用到索引
子查询是用不到索引的,但是如果子查询的条件是和外层相关的,子查询本身用到索引
#16
子查询是用不到索引的,但是如果子查询的条件是和外层相关的,子查询本身用到索引
这句话不理解,能不能举个sql语句说说啊,谢谢.
这句话不理解,能不能举个sql语句说说啊,谢谢.
#17
现在可以确定:
IN(值列表)肯定用索引.
IN(子查询)这个还不清楚。
“子查询是用不到索引的,但是如果子查询的条件是和外层相关的,子查询本身用到索引
”怎么理解?谁给说下,说完给分结贴。
IN(值列表)肯定用索引.
IN(子查询)这个还不清楚。
“子查询是用不到索引的,但是如果子查询的条件是和外层相关的,子查询本身用到索引
”怎么理解?谁给说下,说完给分结贴。
#18
现在可以确定:
IN(值列表)肯定用索引.
IN(子查询)这个还不清楚。
“子查询是用不到索引的,但是如果子查询的条件是和外层相关的,子查询本身用到索引
”怎么理解?谁给写个SQL示例说下,说完给分结贴。
IN(值列表)肯定用索引.
IN(子查询)这个还不清楚。
“子查询是用不到索引的,但是如果子查询的条件是和外层相关的,子查询本身用到索引
”怎么理解?谁给写个SQL示例说下,说完给分结贴。
#19
IN 里面的如果是字段值,并且建的索引上有这个值,是会用的。
反向查询一定不用。 像NOT IN 这种。
#20
IN 在一定情况下,和OR有些相似。
#21
TO : superunusa(迷失方向的蚂蚁)
create table #T
(id int identity(1,1) primary key,userid varchar(20))
insert into #T select 'aa'
insert into #T select 'bb'
insert into #T select 'cc'
insert into #T select 'dd'
insert into #T select 'ee'
insert into #T select 'ff'
--set showplan_all on
select * from #T where id not in (3)
从执行计划上看,MSSQL将此句优化成:
select * from #T where id<3 or id>3
这难道不是在使用索引吗?
create table #T
(id int identity(1,1) primary key,userid varchar(20))
insert into #T select 'aa'
insert into #T select 'bb'
insert into #T select 'cc'
insert into #T select 'dd'
insert into #T select 'ee'
insert into #T select 'ff'
--set showplan_all on
select * from #T where id not in (3)
从执行计划上看,MSSQL将此句优化成:
select * from #T where id<3 or id>3
这难道不是在使用索引吗?