oracle中运行sql查询,where条件in()中的字段会不会出发索引

例如一个表结构为createtableTEST_TABLE(idinteger,namenvarchar2,attribute_1nvarchar2,attribute_... 例如一个表结构为
create table TEST_TABLE
(
id integer,
name nvarchar2,
attribute_1 nvarchar2,
attribute_2 nvarchar2,
attribute_3 nvarchar2,
attribute_4 nvarchar2,
attribute_5 nvarchar2
);

如果这个表的name字段上加了索引,name运行如下SQL会不会通过索引而提高查询效率

select * from TEST_TABLE tt
where tt.name in ('name1','name2','name3','name4','name5');

System.out.println("多谢多谢");
展开
 我来答
百度网友664454771
推荐于2018-02-28 · TA获得超过214个赞
知道小有建树答主
回答量:66
采纳率:0%
帮助的人:102万
展开全部
这个要看oracle优化器自己选择是否要使用INDEX了。这个要取决于你表name列的数据唯一性和分布。分以下2种情况。
1.name的唯一性较差:
('name1','name2','name3','name4','name5')条件访问的数据占全表数据的百分比很大,索引访问的总成本大于全表扫描的成本。这时优化器就会选择全表扫描,也就是说不会使index了。
2.name的唯一性较强
('name1','name2','name3','name4','name5')条件访问的数据占全表数据的百分比很小,这时优化器就会选择使用INDEX了,因此比没有INDEX时性能要高。

注意:ORACLE优化器了解表数据分布靠的是统计信息,因此统计信息的准确是十分重要的,否则也会产生错误的选择,导致性能下降。
198901245631
推荐于2016-08-15 · TA获得超过3.5万个赞
知道大有可为答主
回答量:9037
采纳率:92%
帮助的人:1705万
展开全部
那要看in中的具体内容了。
如果in中的内容是所创建主键(默认创建索引)的话,那么会触发索引的。
如果in中的内容就是普通的字段值,那么都没有索引,所以也就无从谈起索引的触发了。
备注:通常in的效率很低,直接影响sql语句的执行效率的,可以用exist语句进行in语句的替换,或者是直接通过“=”的形式进行多次条件判断来实现。根据实际情况选择即可。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
geqian_007
2012-06-20 · 超过12用户采纳过TA的回答
知道答主
回答量:25
采纳率:0%
帮助的人:38.5万
展开全部
理论上会的,你可以先不建索引,看一下该sql的执行计划,然后创建索引,在看一下该sql的执行计划
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
沉稳内敛ww
2012-06-20 · 超过21用户采纳过TA的回答
知道答主
回答量:152
采纳率:0%
帮助的人:63.7万
展开全部
会促发索引进行查询
Oracle中只要个列加上索引 查询的时候自动根据索引查询
如果数据量不大最好不要使用索引
可能会导致事倍功半的效果哦
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式