江湖开发者 | Java粉
网站地图
首页> 数据库> DBA-Oracle SQL优化
2015
12-12

DBA-Oracle SQL优化

Ø  将需求最小化

数据保留时长,页面数据展示等

Ø  尽量减少返回的结果行,包括行数和字段数

Ø  减少表扫描次数

Ø  建立正确索引

Ø  不要把SQL语句写得太复杂

Ø  使用临时表简化SQL语句

采用临时表暂存中间结果,可以避免程序中多次扫描主表,减少锁阻塞,提高并发性能。

Ø  记录数达到千万级的表需分区 表分区后需要注意几种情况。

Ø  select语句中尽量避免使用select *

SELECT KBP,KPI_NO,DCTIME,VALUE FROM PM_RAW_Z_RESINTERFACE WHERE KPI_NO=3455;

而不要使用SELECT * FROM PM_RAW_Z_RESINTERFACE WHERE KPI_NO=3455;

Ø  多表关联查询,把记录较少的表放在后面

Ø  采用绑定变量

SELECT KBP,KPI_NO,DCTIME,VALUE FROM PM_RAW_Z_RESINTERFACE WHERE KBP = 243 AND KPI_NO=6521 AND DCTIME > 143254358131

SELECT KBP,KPI_NO,DCTIME,VALUE FROM PM_RAW_Z_RESINTERFACE WHERE KBP = 243 AND KPI_NO=6521 AND DCTIME > 1432543581151

采用绑定变量则实现一次解析,多次重用。从而提高数据库效率。

Ø  同一SQL不要不同写法。包括大小写空格等

Select * from PM_RAW_Z_RESINTERFACE

Select * from  pm_raw_z_resinterface

Ø  对于复杂操作(比如UPDATESELECT 语句 写得很复杂--嵌套多级子查询),考虑适当拆成几步,先生成一些临时数据表,再进行关联操作

Ø  UNION会将各查询子集的记录做比较,比UNION ALL 通常速度都会慢。尽量使用UNION ALL

Ø  避免使用耗费资源的排序操作,比如:DISTINCT,UNION,MINUS,INTERSECT,ORDER BYSQL语句会耗费资源的排序(SORT)功能. ORDER BY语句决定了Oracle如何将返回的查询结果排序。Order by字段是非索引项或者有计算表达式都将降低查询速度

Ø  不要在建立索引的数据列上进行下列操作:

1)         避免对索引字段进行计算操作 低效:Select depno,name from dept where sal*3> 25000

2)         避免在索引字段上使用not<>!=

3)         避免在索引列上使用IS NULLIS NOT NULL 

4)         避免在索引列上出现数据类型转换

and ((to_char(f.SOURCE_BEGIN_DATE, 'yyyy-mm-dd') >=

'2010-01-04') 改为and (f.SOURCE_BEGIN_DATE>=to_date('2010-01-04','yyyy-mm-dd')

5)         避免在索引字段上使用函数 ......where trunc(create_date)=trunc(:date1) 

6)         避免建立索引的列中使用空值

7)         避免使用LIKE,修改前台程序或改写SQL

 

Java江湖     
全部评论:

表情验证码,看不清楚,换一张

随机文章

云标签

公众号

微信

分享:分享我们的知识;专注:专注个人技术的提升;