怎样提升SQL语句的查询速度?

 我来答
百度网友cb9ca12
2012-12-05 · TA获得超过109个赞
知道答主
回答量:60
采纳率:0%
帮助的人:47.3万
展开全部
1.选择最有效率的表名顺序。ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表 driving table)将被最先处理. 在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表。
2.WHERE子句中的连接顺序。ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾。
3.SELECT子句中尽量避免使用 ‘* ’。
4.使用DECODE函数来减少处理时间。
5.查询结果能不排序就不排序。尽量不用Order by,distinct,union,MINUS,INTERSECT。
6.用表连接代替子查询in。
7.用索引提高查询效率。但是索引不能随便用,还要搞清楚每种索引适用的情况,比如B*索引、复合索引、函数索引、bitmap索引等。虽然使用索引能得到查询效率的提高,但是也必须注意到它的代价. 索引需要空间来存储,也需要定期维护, 每当有记录在表中增减或索引列被修改时, 索引本身也会被修改. 这意味着每条记录的INSERT , DELETE , UPDATE将为此多付出几 次的磁盘I/O,因为索引需要额外的存储空间和处理,那些不必要的索引反而会使查询反应时间变慢。
8.不能再索引列上适用not、<>、is null、not is null、做四则运算,否则索引会被抑制,不起作用,变成全表扫描。
9.用>=替代>。比如SELECT * FROM S WHERE ID>=4效率SELECT * FROM S WHERE ID>3高。两者的区别在于, 前者DBMS将直接跳到第一个ID等于4的记录,而后者将首先定位到ID=3的记录并且向前扫描到第一个DEPT大于3的记录。
10.如果表的数据量很大,可以为该表建分区。经常使用的子查询可以建成视图。
.
.
.
.
.
.
.
.
76476567
2012-12-05 · TA获得超过441个赞
知道小有建树答主
回答量:257
采纳率:100%
帮助的人:185万
展开全部
加索引是最有效果的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fsw2691047
2012-12-05
知道答主
回答量:3
采纳率:0%
帮助的人:4603
展开全部
他说的话特人工和放大合同
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hly631170455
2012-12-05 · TA获得超过291个赞
知道小有建树答主
回答量:373
采纳率:0%
帮助的人:114万
展开全部
可以进行分页,或排序,或分组
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
杜大老爷
2012-12-05 · TA获得超过121个赞
知道答主
回答量:252
采纳率:0%
帮助的人:90.2万
展开全部
建立索引和视图
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式