关于SQL优化以及数据库优化的话题

上一篇 / 下一篇  2007-12-10 00:00:00 / 个人分类:sql优化

本人虽然学习从事数据库工作四年多了.但是一直认为数据库优化是个很高深的学问,尤其是sql优化.但是在本人工作的过程中对sql优化以及数据库优化有下面的理解,如果有错误的话,请给我留言指正.

首先,很多人提到如何优化SQL,本人一直认为不是说简单的改写SQL本身,要根据相关表的情况,比如有无index就会影响SQL性能,尤其是在表的数据笔记多,比如几百万,而返回的数据可能又比较少的情况下.当然,盲目的建index并不一定会提高性能.这个只是需要考虑的一个方面.


其次,有无在程序中绑定变量,这里有涉及到数据库解析SQL的过程.软解析已经硬解析.如果程序中无法修改,可以通过修改cursor_sharing参数来强制oracle适用软解析.

还有,就是表连接,这里主要说的是hash join,nested loop join和sort/mergejoin.

最后要说的就是排序,创建index或者order by,group by或者distinct的sql都会导致排序的操作.排序在9i之前,可以通过改变session的sort_area-size来加大排序区,9i之后是pga自动管理的.

sql优化的两条主要原则是

1.尽可能的减少磁盘访问,也就是说访问的data都在buffer中.

比如某些经常访问的小表,可以让它cache在buffer中.

2.尽可能的减少磁盘排序.磁盘排序比内存排序慢14000倍.

以上说的大概就是sql优化跟数据库优化的东西.

当然还有其他的很多数据库的选项,比如大快,小快,

db_multi_block-read的参数大小,本地表空间,

分区,都是性能优化中经常考虑到的options

所以说,性能优化不是一个project.而是一个循环的过程,

需要调整,测试,观察,在调整,在测试在观察的过程,最后取一个最佳的状态


TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-10-08  
   1234
567891011
12131415161718
19202122232425
262728293031 

我的存档

数据统计

  • 访问量: 2500
  • 日志数: 647
  • 建立时间: 2008-01-05
  • 更新时间: 2008-01-05

RSS订阅

Open Toolbar