数据库优化原则
Posted 说点特别的
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库优化原则相关的知识,希望对你有一定的参考价值。
简单的生活|减法的世界
数据库优化原则
数据库参数进行优化所获得的性能提升全部加起来只占数据库应用系统性能提升的40%左右,其余60%的系统性能提升全部来自对应用程序的优化。许多优化专家甚至认为对应用程序的优化可以得到80%的系统性能提升。因此可以肯定,通过优化应用程序来对数据库系统进行优化能获得更大的收益。
对应用程序的优化通常可分为两个方面: 源代码的优化和SQL语句的优化。由于涉及到对程序逻辑的改变,源代码的优化在时间成本和风险上代价很高(尤其是对正在使用中的系统进行优化) 。另一方面,源代码的优化对数据库系统性能的提升收效有限,因为应用程序对数据库的操作最终要表现为SQL语句对数据库的操作。
一、对SQL语句进行优化有以下一些直接原因:
1.SQL语句是对数据库(数据) 进行操作的惟一途径,应用程序的执行最终要归结为SQL语句的执行,SQL语句的效率对数据库系统的性能起到了决定性的作用。
2.SQL语句消耗了70%~90%的数据库资源。
3.SQL语句独立于程序设计逻辑,对SQL语句进行优化不会影响程序逻辑,相对于对程序源代码的优化,对SQL语句的优化在时间成本和风险上的代价都很低。
4.SQL语句可以有不同的写法,不同的写法在性能上的差异可能很大。
5.SQL语句易学,难精通。SQL语句的性能往往同实际运行系统的数据库结构、记录数量等有关,不存在普遍适用的规律来提升性能。
二.优化数据库的思想:
1、关键字段建立索引。
2、使用存储过程,它使SQL变得更加灵活和高效。
3、备份数据库和清除垃圾数据。
4、SQL语句语法的优化。
5、清理删除日志。
三.SQL语句优化的原则:
不要以为只有SELECT语句是查询。实际上,带有任何WHERE条件DML(INSERT、UPDATE、DELETE)语句中都包含查询要求,在后面的文章中,当说到查询时,不一定只是指SELECT语句,也有可能指 DML语句中的查询部分。
我们知道,SQL语句同其它语言(如C语言)的语句不一样,它是非过程化(non-procedural)的语句,即当你要取数据时,不需要告诉数据库通过何种途径去取数据,如到底是通过索引取数据,还是应该将表中的每行数据都取出来,然后再通过一一比较的方式取数据(即全表扫描)。
为了实现一个查询,内核必须为每个查询定制一个查询策略,或为取出符合条件的数据生成一个执行计划(execution plan)。典型的,对于同一个查询,可能有几个执行计划都符合要求,都能得到符合条件的数据。例如,参与连接的表可以有多种不同的连接方法,这取决于连接条件和优化器采用的连接方法。为了在多个执行计划中选择最优的执行计划,优化器必须使用一些实际的指标来衡量每个执行计划使用的资源(I/0次数、 CPU等),这些资源也就是我们所说的代价(cost)。如果一个执行计划使用的资源多,我们就说使用执行计划的代价大。以执行计划的代价大小作为衡量标 准,优化器选择代价最小的执行计划作为真正执行该查询的执行计划,并抛弃其它的执行计划。
SQL优化原则:
1、选择最有效率的表名顺序
2、WHERE子句中的连接顺序
3、SELECT子句中避免使用'*'
4、尽量多使用COMMIT
5、计算记录条数
和一般的观点相反, count(*) 比count(1)稍快 , 当然如果可以通过索引检索,对索引列的计数仍旧是最快的. 例如 COUNT(EMPNO)
6、用Where子句替换HAVING子句
7、通过内部函数提高SQL效率
8、IN和EXISTS的区别
in适用于外大内小,EXISTS适用于外小内大
9、用索引提高效率
10、避免在索引列上使用计算
11、避免在索引列上使用IS NULL和IS NOT NULL。避免使用耗费资源的操作带有DISTINCT,UNION,MINUS,INTERSECT,ORDERBY的SQL语句会启动SQL引擎执行耗费资源的排序(SORT)功能. DISTINCT需要一次排序操作, 而其他的至少需要执行两次排序.
END
简单的生活
减法的世界
以上是关于数据库优化原则的主要内容,如果未能解决你的问题,请参考以下文章