1 / 11
文档名称:

数据库优化.docx

格式:docx   大小:27KB   页数:11页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

数据库优化.docx

上传人:jiyudian11 2022/5/17 文件大小:27 KB

下载得到文件列表

数据库优化.docx

文档介绍

文档介绍:关于数据库优化方面的文章很多,但是有的写的似是而非,有的不切实际,对一个数据库来 说,只能做到更优,不可能最优,并且由于实际需求不同,优化方案还是有所差异,根据实 际需要关心的方面(速度、存储空间、可维护性、可拓展性)来优化数据库,而这些方数据库的物理存储、操作系统环境、网络环境进行必要的设计,使 得我们的系统在将来能适应比较多的用户并发和比较大的数据量。
这里需要注意文件组的作用,适用文件组可以有效把I/O操作分散到不同的物理硬盘, 提高并发能力。
7、 系统设计
整个系统的设计特别是系统结构设计对性能是有很大影响的,对于一般的OLTP系统, 可以选择C/S结构、三层的C/S结构等,不同的系统结构其性能的关键也有所不同。 系统设计阶段应该归纳一些业务逻辑放在数据库编程实现,数据库编程包括数据库存储过 程、触发器和函数。用数据库编程实现业务逻辑的好处是减少网络流量并可更充分利用数据 库的预编译和缓存功能。
8、 索引的设计
在设计阶段,可以根据功能和性能的需求进行初步的索引设计,这里需要根据预计的数 据量和查询来设计索引,可能与将来实际使用的时候会有所区别。
关于索引的选择,应改主意:
A、 根据数据量决定哪些表需要增加索引,数据量小的可以只有主键。
B、 根据使用频率决定哪些字段需要建立索引,选择经常作为连接条件、筛选条件、聚 合查询、排序的字段作为索引的候选字段。
C、 把经常一起出现的字段组合在一起,组成组合索引,组合索引的字段顺序与主键一 样,也需要把最常用的字段放在前面,把重复率低的字段放在前面。
D、 一个表不要加太多索引,因为索引影响插入和更新的速度
三、编码阶段
编码阶段是本文的重点,因为在设计确定的情况下,编码的质量几乎决定了整个系统的
编码阶段首先是需要所有程序员有性能意识,也就是在实现功能同时有考虑性能的思 想,数据库是能进行集合运算的工具,我们应该尽量的利用这个工具,所谓集合运算实际是 批量运算,就是尽量减少在客户端进行大数据量的循环操作,而用
SQL语句或者存储过程 代替。关于思想和意识,很难说得很清楚,需要在编程过程中来体会。
下面罗列一些编程阶段需要注意的事项:
1、 只返回需要的数据
返回数据到客户端至少需要数据库提取数据、网络传输数据、客户端接收数据以及客户 端处理数据等环节,如果返回不需要的数据,就会增加服务器、网络和客户端的无效劳动, 其害处是显而易见的,避免这类事件需要注意:
A、横向来看,不要写SELECT *的语句,而是选择你需要的字段。
B、 纵向来看,合理写WHERE子句,不要写没有 WHERE的SQL语句。
C、 注意SELECT INTO后的WHERE子句,因为SELECT INTO把数据插入到临时表, 这个过程会锁定一些系统表,如果这个WHERE子句返回的数据过多或者速度太慢,会造 成系统表长期锁定,诸塞其他进程。
D、 对于聚合查询,可以用HAVING子句进一步限定返回的行。
2、 尽量少做重复的工作
这一点和上一点的目的是一样的,就是尽量减少无效工作,但是这一点的侧重点在客户 端程序,需要注意的如下:
A、 控制同一语句的多次执行,特别是一些基础数据的多次执行是很多程序员很少注意 的。
B、 减少多次的数据转换,也许需要数据转换是设计的问题,但是减少次数是程序员可 以做到的。
C、 杜绝不必要的子查询和连接表,子查询在执行计划一般解释成外连接,多余的连接 表带来额外的开销。
D、 合并对同一表同一条件的多次UPDATE,比如
UPDATE EMPLOYEE SET FNAME='HAIWER'WHERE EMP_ID='VPA 30890F'
UPDATE EMPLOYEE SET LNAME=,YANG,WHERE EMP_ID='VPA30890F' 这两个语句应该合并成以下一个语句
UPDATE EMPLOYEE SET FNAME='HAIWER',LNAME='YANG'
WHERE EMP_ID='VPA30890F'
E、 UPDATE操作不要拆成DELETE操作+INSERT操作的形式,虽然功能相同,但是 性能差别是很大的。
F、 不要写一些没有意义的查询,比如
SELECT * FROM EMPLOYEE WHERE 1=2
3、 注意事务和锁
事务是数据库应用中和重要的工具,它有原子性、一致性、隔离性、持久性这四个属性, 很多操作我们都需要利用事务来保证数据的正确性。在使用事务中我们需要做到尽量避免死 锁、尽量减少阻塞。具体以下方面需要特别注意:
A、 事务操作过程要尽量小,能拆分的事务要拆分开来。
B、 事务操作过程不应该有交互,因为交互等待的时候,事务并未结束,可能锁定了