首页 > 数据库

如何写出高效的sql的一点想法及oracle常用hint用法

时间:2009-05-17 09:13:58  作者:冰刀  我要投稿
Linux初探欢迎您的投稿,投放方法请点击这里查看,我们会定期赠送精美小礼品给优秀的投稿作者。海纳百川 取则行远!LinuxGoo欢迎您的到来。
author:skatetime:2009-05-15 如何写出高效的sql的一点想法 迷糊的问题: 1.什么样的sql,才算是高效的sql呢?2.sql为什么不走索引?如何让sql走索引,即改变sql的执......

author:skate

time:2009-05-15


如何写出高效的sql的一点想法

迷糊的问题:

1.什么样的sql,才算是高效的sql呢?
2.sql为什么不走索引?如何让sql走索引,即改变sql的执行计划
3.索引有哪几种?
4,什时候用索引,什么时候全表扫描

oracle优化器的表统计信息,评估出表的最佳连接顺序,表的连接方法,执行路径;
最后生成执行计划,oracle就按着这个计划来执行sql

1.什么样的sql是高效sql?


答:最本质答案就是执行时间最短,怎么才能最短了,就是用最少的资源把事办了,不做无用功;
即使sql的io最少,那怎么样才才能最少呢?就是尽量用索引,不要全表扫描;在多表关联的
时候,开发人选正确的表连接方法,执行路径等

2.sql为何不走索引

A.类型不匹配
B。条件列包含函数但没有创建相应的函数索引
C。复合索引中的前导列没有被做为查询条件
D。CBO的模式下,选择的行数比例较大,优化器选择全表扫描
E。CBO的模式下,表很久没有分析,优化器选择了全表扫描


3.索引种类及创建方法

A。B*索引

create index indexname on tablename(columnname);

B.反向索引

create index indexname on tablename(columnname) reverse;

C.降序索引

create index indexname on tablename(columnname desc);

D.位图索引

create bitmap index indexname on tablename(columnname);

E。函数索引

create index indexname on tablename(functionname(columnname));


4,什时候用索引,什么时候用全表扫描?

答:

要使用索引时,首先要弄清一些基本信息
表有多少行?查询返回多少行?表的哪些列上有索引?都是什么样的索引?
在有多个条件列时,应该选择什么样的索引?

A.当查询的记录数,在有序表中小于40%的时候,最好用索引;否则用全表扫描
B.当查询的记录数,在有无序表中小于7%的时候,最好用索引;否则用全表扫描
C.表的锁片较多时(这个表dml操作很频繁)

如果您需转载 如何写出高效的sql的一点想法及oracle常用hint用法,请注明来自LinuxGoo.com,其版权归原作者所有。请广大网友留言时遵纪守法,使用文明用语。如果您在应用中有什么问题,请在下面留言,我们会尽快解答。
来顶一下
近回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
相关文章
栏目热门