参考:
http://blog.csdn.net/axin66ok/article/details/7891386
http://blog.csdn.net/mis_lixiaoli/article/details/6331312
摘自以上两篇文章!!!
一、操作符的优化
1、exists 替换 in 。
2、not in (not in 不能应用索引)用NOT EXISTS或(外连接+判断为空)方案代替。
3、is null 、is not null 判断字段是否为空 一般是不会应用索引,并且将导致引擎放弃使用索引而进行全表扫描,可以使用 >0 或者 >''替换
4、like关键字不会应用索引,由于like可以使用通配符查询,里面的通配符组合可能达到几乎所有的任意查询
但是like使用得不好会引起性能上的问题,如LIKE ‘%5400%’这种查询不会引用索引,而LIKE‘X5400%’则会引用范围索引。一个实际例子:用YW_YHJBQK表中营业编号后面的户标识号可来查询营业编号 YY_BH LIKE‘%5400%’ 这个条件会产生全表扫描,如果改成YY_BH LIKE ’X5400%’ OR YY_BH LIKE ’B5400%’则会利用YY_BH的索引进行两个范围的查询,性能肯定大大提高。
5、用UNION替换OR (适用于索引列),通常情况下, 用UNION替换WHERE 子句中的OR 将会起到较好的效果.对索引列使用OR 将造成全表扫描. 注意,以上规则只针对多个索引列有效.如果有column 没有被索引, 查询效率可能会因为你没有选择OR而降低.。
6、用IN来替换OR。
7、SELECT子句中避免使用‘ * ‘。
二、数据库优化方案
1、 利用表分区,分区将数据在物理上分隔开,不同分区的数据可以制定保存在处于不同磁盘上的数据文件 里。这样,当对这个表进行查询时,只需要在表分区中进行扫描,而不必进行全表扫描,明显缩短了查询时间,另外处于不同磁盘的分区也将对这个表的数据传输分 散在不同的磁盘I/O,一个精心设置的分区可以将数据传输对磁盘I/O竞争均匀地分散开。对数据量大的时时表可采取此方法。可按月自动建表分区。
2、别名的使用,别名是大型数据库的应用技巧,就是表名、列名在查询中以一个字母为别名,查询速度要比建连接表快1.5倍。
3、 索引Index的优化设计。索引可以大大加快数据库的查询速度,索引把表中的逻辑值映射到安全的RowID,因此 索引能进行快速定位数据的物理地址。对一个建有索引的大型表的查询时,索引数据可能会用完所有的数据块缓存空间,ORACLE不得不频繁地进行磁盘读写来 获取数据,因此在对一个大型表进行分区之后,可以根据相应的分区建立分区索引。但是个人觉得不是所有的表都需要建立索引,只针对大数据量的表建立索引。
缺点: 第一,创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。第二,索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物 理空间,如果要建立聚簇索引,那么需要的空间就会更大。第三,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速 度。索引需要维护:为了维护系统性能,索引在创建之后,由于频繁地对数据进行增加、删除、修改等操作使得索引页发生碎块,因此,必须对索引进行维护。
三、原则
保证在实现功能的基础上,尽量减少对数据库的访问次数;通过搜索参数,尽量减少对表的访问行数,最小化结果集,从而减轻网络负担;能够分开的操作尽量分开处理,提高每次的响应速度;在数据窗口使用SQL时,尽量把使用的索引放在选择的首列;算法的结构尽量简单。
1、能用UNION ALL就不要用UNION ,UNION ALL不执行SELECT DISTINCT函数,这样就会减少很多不必要的资源
2、尽量不要用SELECT INTO语句,SELECT INOT 语句会导致表锁定,阻止其他用户访问该表。
3、充分利用连接条件,在某种情况下,两个表之间可能不只一个的连接条件,这时在 WHERE 子句中将连接条件完整的写上,有可能大大提高查询速度。
4、不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。
5、应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。如:
select id from t where substring(name,1,3)='abc'--name以abc开头的id。应改为:select id from t where name like 'abc%'
6、应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如:SELECT * FROM T1 WHERE F1/2=100 应改为: SELECT * FROM T1 WHERE F1=100*2
相关推荐
本文将对数据库相关的知识点进行详细总结,特别是针对计算机三级数据库考试的内容。 1. 数据库管理系统(DBMS)是操纵和管理数据库,控制数据资源使用的软件,如Oracle、SQL Server、MySQL等。 2. 事务是操作系统...
数据库总结01.xmind
数据库总结.xmind
关于数据库及ado的基础知识,可以快速入门
数据库单表查询的总结 还有数据库的其他总结分开上传 数据库单表查询的总结 还有数据库的其他总结分开上传
**JDBC连接数据库经验总结** Java Database Connectivity (JDBC) 是Java编程语言中用于与关系数据库交互的标准API。它提供了一种规范,使得Java开发者能够使用标准的Java语句来执行SQL命令,从而实现对数据库的操作...
关系数据库是现代数据库系统的核心,它基于数学中的关系理论,主要由关系数据结构、关系模式和关系操作等概念构成。本章将深入探讨这些概念及其重要性。 首先,我们要理解关系数据结构。关系是一个数学概念,它在...
数据库系统复习总结 本资源摘要信息将对数据库系统的基本概念、数据库管理系统、数据模型、数据库设计、数据库恢复、事务处理等方面进行详细的总结和解释。 一、数据库系统的基本概念 * 数据库系统是长期存储在...
数据库索引总结,索引的作用?索引的注意事项?数据库索引的结构?
数据库编程总结 数据库编程总结 数据库编程总结
空间数据库是信息技术与地理学相结合的产物,它专门用于管理和处理具有空间属性的数据。数据库管理系统(DBMS)是实现这一目标的关键,它提供了一种结构化的数据存储方式,允许高效地存储、检索和管理数据。在空间...
ADO.net 操作数据库总结 ADO.net 是 một 微软公司开发的数据库访问技术,用于与关系数据库管理系统(RDBMS)交互。以下是 ADO.net 操作数据库的总结,包括使用 SqlConnection 和 SqlCommand 对象连接数据库、执行...
数据库总结02.xmind
【数据库学习总结-总集】 在信息技术领域,数据库是存储和管理数据的核心工具,它扮演着数据仓库的角色,为各种应用程序提供数据支持。本总结旨在深入探讨数据库的基础知识、主要类型、设计原则以及最佳实践,帮助...
数据库是信息技术中的重要组成部分,主要用于存储、管理以及...对于“三级数据库总结”的学习,考生需要对以上知识点有深入理解并能灵活应用。通过系统地复习和实践,可以提高在笔试和机试中的表现,从而提高通过率。
这篇自我总结将探讨SQL的重要性、其功能以及如何有效地学习SQL。 首先,理解SQL的基本概念至关重要。SQL是一种标准化的语言,适用于多种数据库管理系统,如MySQL、Oracle、SQL Server、PostgreSQL等。它的主要功能...
NoSQL数据库总结 NoSQL数据库是一种非关系型的数据库,旨在解决传统关系数据库在应付Web 2.0网站,特别是超大规模和高并发的SNS类型的Web 2.0网站中的问题。NoSQL数据库的优点是可以处理超大量的数据,可以运行在...