分享
 
 
 

Oracle SQL的优化(1)

王朝oracle·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

1、在Oracle中有两种操作可以直接访问Table

(1)Table Access Full

--为了优化全表扫描的性能,Oracle在每次数据库读取中都会读取多个数据块;

--只要查询中没有where子句,Oracle就会采用全表扫描。

(2)Table Access by RowID(基于RowID的访问)

--RowID记录了数据行的物理存储位置;

--Oracle使用索引将数据值与RowID相关联,从而与数据物理位置相关联。

2、提示:在select要害字之后使用/*+... */

3、使用Index:

(1)Index unique scan

select * from bookshelf where title='WTL'

假设在title列上有唯一索引,则这个语句的执行方式为:

a)首先通过insex unique scan操作访问title列索引;

b)从索引返回与title值'WTL'相匹配的RowID值,然后利用此RowID值

通过Table Access by RowID操作来查询BookShelf表。

(2)Index range scan

假如基于一个值的范围查询或者利用一个非唯一索引进行查询,则可以使用index range

scan操作对索引进行查询。由于index range scan操作需要从索引中读取多个值,所以它的

效率要比index unique scan低。

假设emp表的ename上有一个非唯一索引idx_emp_ename,假如在查询的where子句中给出

ename的限定条件,则可能会执行idx_emp_ename索引的index range scan操作,应为ename上

的这和索引是一个非唯一性索引,所以数据库不能在该索引上执行index unique scan操作,

即便是ename等于查询中的单个值也不行,即...where ename='GLEDESON' 和

...where ename like 'G%'都是执行index range scan 操作的。

注重:假如在like条件中的开头使用了通配符则查询将不会使用索引(如:like '%M%')

来解决这个查询。

4、使用索引的注重事项:

(1)假如设置了一个索引列等(=)一某个值,则将使用index range scan操作

--唯一索引(unique index)

*索引--

--非唯一索引(non-unique index)

(2)要使用一个索引不一定要给出明确的值,index range scan操作可为值的范围扫描一个索引,具

体的操作符有"<"、">"、"like",注重:不要在like算式的开头使用通配符!!

--索引的全表扫描

*全表扫描--

--表的全表扫描

(3)假如在where条件中使用了函数,则不会使用索引,除非索引是基于函数的!

(4)在查询条件中使用了is null、is not null则不会使用索引。

(null值是不存在索引中的)

*在大多数情况下,执行全表扫描将会比执行用索引返回的所有值执行索引扫描更为有效!

(5)假如在查询条件中使用了"!="操作将不会使用索引,"<>"也不会。

(6)使用not in、in操作符也不会使用索引,在Oracle中,几乎所有的not in、in操作都可以

用not exists、exists来代替。...where exists(select 'x' from ...where ...)

*使用exists子句,不管从子查询中抽取什么数据,它只会查看where子句。这样优化器就

不会遍历整个表而仅根据索引就可以完成工作(这里假设where子句中的列上使用了index).

通过使用exists,Oracle系统会首先检查主查询,然后运行子查询直到它找到第一个匹

配项,这样就节省了时间。Oracle在执行in查询时,首先执行子查询,并将获得的结果列

表存放到一个加了索引的临时表中,在执行子查询之前,先将主查询挂起,待子查询执行

完毕存放到临时表中以后再执行主查询,这就是使用exists比使用in通常查询速度快的原

因。

(7)假如设置了复合索引的首列等于某个值,则使用该索引。

*在复合索引中,Oracle9i之前,只有在限定条件中使用了复合索引的首列,才会使用该索

引,但Oracle9i之后,索引的跳跃扫描特性答应优化器潜在地使用连接索引,即使复合索

引的首列没有出现在where子句中也是如此!

(8)假如选择了一个索引列的max或min函数,则优化器会使用此索引来快速地找到列的最大最小

值。

(9)索引的选择性:假设一个表中有100行,其中的一列(这列上有索引)中不重复的纪录有80个,

也就是说有20行纪录有重复,则这个索引的选择性为80/100=0.80,即这列上的索引的选择

性是80%,选择性越高,列中每个不同的值返回的行的数目就越少。

假如使用的优化模式是CBO,并且索引是经过分析的,则优化程序就会考虑索引的选择

性来判定使用索引是否会降低执行查询的成本。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有