- 浏览: 21376 次
- 性别:
- 来自: 深圳
文章分类
最新评论
转自 硅谷动力 http://www.enet.com.cn/article/2008/0321/A20080321193099.shtml
优化数据库的方法及SQL语句优化的原则
优化数据库的方法:
1、关键字段建立索引。
2、使用存储过程,它使SQL变得更加灵活和高效。
3、备份数据库和清除垃圾数据。
4、SQL语句语法的优化。(可以用Sybase的SQL Expert,可惜我没找到unexpired的序列号)
5、清理删除日志。
SQL语句优化的原则:
◆1、使用索引来更快地遍历表
缺省情况下建立的索引是非群集索引,但有时它并不是最佳的。在非群集索引下,数据在物理上随机存放在数据页上。合理的索引设计要建立在对各种查询的分析和预测上。一般来说:①.有大量重复值、且经常有范围查询(between, > ,< ,> =,< =)和order by、group by发生的列,可考虑建立群集索引;②.经常同时存取多列,且每列都含有重复值可考虑建立组合索引;③.组合索引要尽量使关键查询形成索引覆盖,其前导列一定是使用最频繁的列。索引虽有助于提高性能但不是索引越多越好,恰好相反过多的索引会导致系统低效。用户在表中每加进一个索引,维护索引集合就要做相应的更新工作。
◆2、IS NULL 与 IS NOT NULL
不能用null作索引,任何包含null值的列都将不会被包含在索引中。即使索引有多列这样的情况下,只要这些列中有一列含有null,该列就会从索引中排除。也就是说如果某列存在空值,即使对该列建索引也不会提高性能。任何在where子句中使用is null或is not null的语句优化器是不允许使用索引的。
◆3、IN和EXISTS
EXISTS要远比IN的效率高。里面关系到full table scan和range scan。几乎将所有的IN操作符子查询改写为使用EXISTS的子查询。
◆4、在海量查询时尽量少用格式转换。
◆5、当在SQL SERVER 2000中,如果存储过程只有一个参数,并且是OUTPUT类型的,必须在调用这个存储过程的时候给这个参数一个初始的值,否则会出现调用错误。
◆6、ORDER BY和GROPU BY
使用ORDER BY和GROUP BY短语,任何一种索引都有助于SELECT的性能提高。注意如果索引列里面有NULL值,Optimizer将无法优化。
◆7、任何对列的操作都将导致表扫描,它包括数据库函数、计算表达式等等,查询时要尽可能将操作移至等号右边。
◆8、IN、OR子句常会使用工作表,使索引失效。如果不产生大量重复值,可以考虑把子句拆开。拆开的子句中应该包含索引。
◆9、SET SHOWPLAN_ALL ON 查看执行方案。DBCC检查数据库数据完整性。
DBCC(DataBase Consistency Checker)是一组用于验证 SQL Server 数据库完整性的程序。
◆10、慎用游标
在某些必须使用游标的场合,可考虑将符合条件的数据行转入临时表中,再对临时表定义游标进行操作,这样可使性能得到明显提高。
总结:
优化就是WHERE子句利用了索引,不可优化即发生了表扫描或额外开销。经验证,SQL Server性能的最大改进得益于逻辑的数据库设计、
索引设计和查询设计方面。反过来说,最大的性能问题常常是由其中这些相同方面中的不足引起的。其实SQL优化的实质就是在结果正确的前提下,用优化器可以识别的语句,充份利用索引,减少表扫描的I/O次数,尽量避免表搜索的发生。其实SQL的性能优化是一个复杂的过程,以上这些只是在应用层次的一种体现,深入研究还会涉及数据库层的资源配置、网络层的流量控制以及操作系统层的总体设计。
2、使用存储过程,它使SQL变得更加灵活和高效。
3、备份数据库和清除垃圾数据。
4、SQL语句语法的优化。(可以用Sybase的SQL Expert,可惜我没找到unexpired的序列号)
5、清理删除日志。
SQL语句优化的原则:
◆1、使用索引来更快地遍历表
缺省情况下建立的索引是非群集索引,但有时它并不是最佳的。在非群集索引下,数据在物理上随机存放在数据页上。合理的索引设计要建立在对各种查询的分析和预测上。一般来说:①.有大量重复值、且经常有范围查询(between, > ,< ,> =,< =)和order by、group by发生的列,可考虑建立群集索引;②.经常同时存取多列,且每列都含有重复值可考虑建立组合索引;③.组合索引要尽量使关键查询形成索引覆盖,其前导列一定是使用最频繁的列。索引虽有助于提高性能但不是索引越多越好,恰好相反过多的索引会导致系统低效。用户在表中每加进一个索引,维护索引集合就要做相应的更新工作。
◆2、IS NULL 与 IS NOT NULL
不能用null作索引,任何包含null值的列都将不会被包含在索引中。即使索引有多列这样的情况下,只要这些列中有一列含有null,该列就会从索引中排除。也就是说如果某列存在空值,即使对该列建索引也不会提高性能。任何在where子句中使用is null或is not null的语句优化器是不允许使用索引的。
◆3、IN和EXISTS
EXISTS要远比IN的效率高。里面关系到full table scan和range scan。几乎将所有的IN操作符子查询改写为使用EXISTS的子查询。
◆4、在海量查询时尽量少用格式转换。
◆5、当在SQL SERVER 2000中,如果存储过程只有一个参数,并且是OUTPUT类型的,必须在调用这个存储过程的时候给这个参数一个初始的值,否则会出现调用错误。
◆6、ORDER BY和GROPU BY
使用ORDER BY和GROUP BY短语,任何一种索引都有助于SELECT的性能提高。注意如果索引列里面有NULL值,Optimizer将无法优化。
◆7、任何对列的操作都将导致表扫描,它包括数据库函数、计算表达式等等,查询时要尽可能将操作移至等号右边。
◆8、IN、OR子句常会使用工作表,使索引失效。如果不产生大量重复值,可以考虑把子句拆开。拆开的子句中应该包含索引。
◆9、SET SHOWPLAN_ALL ON 查看执行方案。DBCC检查数据库数据完整性。
DBCC(DataBase Consistency Checker)是一组用于验证 SQL Server 数据库完整性的程序。
◆10、慎用游标
在某些必须使用游标的场合,可考虑将符合条件的数据行转入临时表中,再对临时表定义游标进行操作,这样可使性能得到明显提高。
总结:
优化就是WHERE子句利用了索引,不可优化即发生了表扫描或额外开销。经验证,SQL Server性能的最大改进得益于逻辑的数据库设计、
索引设计和查询设计方面。反过来说,最大的性能问题常常是由其中这些相同方面中的不足引起的。其实SQL优化的实质就是在结果正确的前提下,用优化器可以识别的语句,充份利用索引,减少表扫描的I/O次数,尽量避免表搜索的发生。其实SQL的性能优化是一个复杂的过程,以上这些只是在应用层次的一种体现,深入研究还会涉及数据库层的资源配置、网络层的流量控制以及操作系统层的总体设计。
发表评论
-
wabacus学习体会二
2012-09-26 12:09 975采用控制列编辑方式生成可编辑自动列表报表时,需要把 ... -
JNDI全面总结 (tomact中配置连接池)
2012-09-24 13:09 1406转发 http://yunqiang-zhang- ... -
wabacus 学习体会一
2012-08-20 16:21 1137采用<report type ="form&q ... -
SQL完成交叉表功能
2012-08-08 09:38 2052SQL完成交叉表功能 转自http://www.2cto. ... -
Eclipse的Tomcat插件安装
2012-08-06 15:55 841Eclipse的Tomcat插件安装[ ... -
如何禁止windows xp和2003使用F8进入安全模式
2012-08-06 15:27 1470如何禁止window ... -
OFBiz的主要配置文件说明——ofbiz-component.xml
2012-07-18 17:45 1061OFBiz的主要配置文件说明——ofbiz-component ... -
OFBiz之Component与Application
2012-07-18 17:38 794OFBiz之Component与Application ... -
OFBiz的主要配置文件说明——component-load.xml
2012-07-18 17:25 955OFBiz的主要配置文件说明——component-lo ... -
Ofbiz基本结构
2012-07-18 17:11 959OFBiz是一个非常著名的电子商务平台,是一个 ... -
MVC已过时,MOVE时代来临?
2012-07-17 22:19 726转自:http://sd.csdn.net/a/201 ... -
只需一条语句即可记住所有的ORACLE的系统表
2012-08-06 15:31 663转自:http://wulinhaoxia5.ite ... -
VMWare虚拟机优化十招
2012-07-16 16:35 1338转自 http://virtual.51cto.com/art ... -
OFBIZ10.04开发环境搭建
2012-07-16 00:23 1044转自 http://www.haogongju.net/art ... -
软件产品的演示技巧
2010-03-31 15:49 632软件产品的演示技巧 -- ... -
sql语句优化
2012-07-15 23:58 682sql语句优化 总结1 选择索引 ... -
SQL语句优化的原则(主要MySQL)
2012-07-15 23:44 1024转自 http://home.oncity.cc/home-s ...
相关推荐
本文将深入探讨优化数据库的思想以及SQL语句优化的原则。 一、优化数据库的思想 1. 数据库设计:良好的数据库设计是优化的基础。应遵循第一范式(1NF)、第二范式(2NF)和第三范式(3NF),减少冗余数据,确保...
为了保证SQL语句优化的有效性,以下几点是必须要遵守的原则: - 数据库访问代码要集中维护,以统一进行性能监控和调整。 - 定期测试数据库性能,并根据性能监控数据调整优化策略。 - 保证优化措施的可回滚性,...
SQL语句优化原则是数据库管理和应用开发中的关键环节,它涉及到如何提高查询效率,减少资源消耗,提升系统整体性能。以下是一些针对SQL语句优化的重要原则和方法: 1. **利用索引**:索引是提高查询速度的关键。...
编写高效的SQL语句,避免全表扫描、减少笛卡尔积、正确使用索引,以及避免过度复杂的联接操作,都是编程实践中应当遵循的原则。同时,使用存储过程和预编译语句可以减少解析和编译的时间,提高执行效率。此外,合理...
本文将对Oracle数据库中的SQL语句优化进行深入探讨,分析其优化目的和原则,并通过实例介绍一些优化方法。 首先,优化应用程序中SQL语句的必要性十分明显。SQL语句是对数据库中的数据进行操作的唯一途径,应用程序...
创建视图的SQL语句是`CREATE VIEW`: ```sql CREATE VIEW 视图名 AS SELECT 列1, 列2, ... FROM 表1 WHERE 条件; ``` 比如,我们可能需要一个只显示激活用户的视图: ```sql CREATE VIEW ActiveUsers AS SELECT ...
#### SQL语句优化原则 - 减少资源消耗:优化的目的在于减少CPU、内存、磁盘I/O等资源的消耗。 - 缩短响应时间:优化后的语句应能够提高响应速度,缩短用户等待时间。 - 数据访问模式优化:优化数据的读写方式,减少...
文章还提到了建立良好SQL语句时应遵循的一些原则,以及SQL语句优化技术的具体方法和步骤。优化方法包括但不限于使用合适的索引、避免不必要的数据类型转换、选择最优的连接方式、调整子查询的写法以及重写复杂的SQL...
总结来说,SQL语句优化在医院数据库系统中起着至关重要的作用。通过系统化的优化方法,包括详细的需求分析、关系模式的规范化处理以及查询技术的应用,不仅可以提高医院数据库系统的性能,还能确保系统的稳定性和...
具体来说,有几个重要的SQL语句优化原则需要掌握和理解: 1. 判断空值(NULL)与索引的使用。在数据库中,包含NULL值的列不会被索引。因此,在where子句中使用ISNULL或ISNOTNULL条件时,优化器将不会使用索引,而是...
以下是对标题“SQL语句优化的原则”及描述中所提及知识点的详细解释: 1. **使用索引来优化查询**: - 非群集索引是默认的索引类型,但在某些情况下,群集索引可能更适合。群集索引决定了数据的物理存储顺序,适用...
本文将详细介绍数据库创建索引的原则、分类、创建方法、管理和优化等方面的知识点。 索引的概念和优点 ---------------- 索引是数据库表中一个或多个列的值的数据结构,用于快速定位和检索数据。创建索引可以提高...
2. SQL语句优化策略 - 索引优化:确保经常用于查询的字段上有合适的索引,可以显著提高查询速度。避免在索引列上使用不等式操作符或函数,因为这可能导致无法使用索引。 - JOIN优化:合理设计JOIN条件,避免全表...
在处理基于Oracle数据库的SQL语句优化时,我们首先需要理解查询在关系型数据库中的重要性以及它如何影响数据库应用程序的性能。查询语句执行效率的提高直接关系到用户体验。由于系统硬件通常难以改变,因此提高SQL...
### SQL Server数据库性能优化之SQL语句篇 #### 一、引言 在现代企业级应用中,数据库性能直接影响到整个系统的响应时间和用户体验。对于基于SQL Server构建的应用来说,优化SQL语句是提升数据库性能的关键步骤之一...
SQL语句优化主要包括遵循一定的优化原则和利用Oracle数据库执行原理。 首先,了解SQL语句在Oracle数据库中的执行原理是进行优化的基础。一条SQL语句在Oracle中执行需要经过四个步骤:分析、优化、生成实际执行计划...
【SQL优化原则】 1. **减少I/O操作**:I/O操作是数据库性能的瓶颈之一。优化的目标是尽量减少磁盘读写,避免不必要的数据传输,以减轻CPU的负担。 2. **优化排序操作**:频繁的排序操作会导致额外的计算开销,应当...
3. 任何在 where 子句中使用 is null 或 is not null 的语句优化器是不允许使用索引的 Oracle database 的优化器在遇到 is null 或 is not null 条件时,不会使用索引,这可能会导致 SQL 语句的执行效率下降。 4....