本人虽然学习从事数据库工作四年多了.但是一直认为数据库优化是个很高深的学问,尤其是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.而是一个循环的过程,
需要调整,测试,观察,在调整,在测试在观察的过程,最后取一个最佳的状态
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9408/viewspace-102399/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/9408/viewspace-102399/