create table ta (fa varchar2(10), fb number)
create index idx_ta_fb on ta(fb)
这是最简单的,在这个基础上还可以加其他条件,例如唯一性等。
同时还有其他方法也可以创建索引。
如果你有pl/sql,可以查看一下表的定义,其中有索引的部分。
1,第一次查询慢,以后就快了,主要是因为第一次要进行磁盘 *** 作,以后数据被cache到内存中了,不在 *** 作磁盘,所以就快了。2,对于你说的这四种查询,where条件中的a=a估计你是举例子这样写的吧。实际上应该是a=变量A。其他的b,c,d也是这样。那么这种语句都是可以利用你说的复合索引的。如果是RBO优化器,这四句都应该用索引。但是oracle现在推荐的CBO优化器不能保证你都走索引。
3,到底用没用索引,你可以从v$sqlaera中找到你的语句对应的hash_value,然后从v$sql_plan中找到语句的执行计划,通过执行计划确认你的语句是不是使用了索引。
具体语句你可以类似如下写法:
select
hash_value,sql_text
from
v$sqlarea
where
upper(sql_text)
like
'%你需要查找的sql语句的特征片段%'
select
*
from
v$sql_plan
where
hash_value
=
上一句查到的hash_value
使用hint技术,表别名+索引名select/*+
INDEX(pa IDX_PAGREE_1)
INDEX(pi IDX_PITEM_5)
INDEX(pd IDX_PRODUCTS_3)
*/ *
from table1 c,
table2 pa,
table3 pi,
table4 pd
where pa.customerid = c.customerid
and pi.purchaseagreementid = pa.id
and pi.productid = pd.id
and pd.statusid=3601
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)