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("多谢多谢"); 展开
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("多谢多谢"); 展开
4个回答
展开全部
这个要看oracle优化器自己选择是否要使用INDEX了。这个要取决于你表name列的数据唯一性和分布。分以下2种情况。
1.name的唯一性较差:
('name1','name2','name3','name4','name5')条件访问的数据占全表数据的百分比很大,索引访问的总成本大于全表扫描的成本。这时优化器就会选择全表扫描,也就是说不会使index了。
2.name的唯一性较强
('name1','name2','name3','name4','name5')条件访问的数据占全表数据的百分比很小,这时优化器就会选择使用INDEX了,因此比没有INDEX时性能要高。
注意:ORACLE优化器了解表数据分布靠的是统计信息,因此统计信息的准确是十分重要的,否则也会产生错误的选择,导致性能下降。
1.name的唯一性较差:
('name1','name2','name3','name4','name5')条件访问的数据占全表数据的百分比很大,索引访问的总成本大于全表扫描的成本。这时优化器就会选择全表扫描,也就是说不会使index了。
2.name的唯一性较强
('name1','name2','name3','name4','name5')条件访问的数据占全表数据的百分比很小,这时优化器就会选择使用INDEX了,因此比没有INDEX时性能要高。
注意:ORACLE优化器了解表数据分布靠的是统计信息,因此统计信息的准确是十分重要的,否则也会产生错误的选择,导致性能下降。
展开全部
理论上会的,你可以先不建索引,看一下该sql的执行计划,然后创建索引,在看一下该sql的执行计划
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
会促发索引进行查询
Oracle中只要个列加上索引 查询的时候自动根据索引查询
如果数据量不大最好不要使用索引
可能会导致事倍功半的效果哦
Oracle中只要个列加上索引 查询的时候自动根据索引查询
如果数据量不大最好不要使用索引
可能会导致事倍功半的效果哦
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询