日期:2014-05-18  浏览次数:20832 次

有经验的朋友能否谈谈数据库优化从哪几个方面考虑?
如题

------解决方案--------------------
1. 表结构(指的大框架设计)
2. 索引
3. 数据
4. 查询语句
------解决方案--------------------
表结构,数据类型,表与表之间的逻辑关系等,只讲得出这些.
------解决方案--------------------
纯属补充:(转)

--存储衍生数据
对一些要做大量重复性计算的过程而言,若重复计算过程得到的结果相同,或计算牵扯多行数据需额外的磁盘I/O开销,或计算复杂需要大量的CPU时间,就考虑存储计算结果(冗余储存)。现予以分类说明:
若在一行内重复计算,就在表内增加列存储结果。但若参与计算的列被更新时,必须要用触发器更新这个新列。
若对表按类进行重复计算,就增加新表(一般而言,存放类和结果两列就可以了)存储相关结果。但若参与计算的列被更新时,就必须要用触发器立即更新、或存储过程或应用代码批量更新这个新表。
若对多行进行重复性计算(如排名次),就在表内增加列存储结果。但若参与计算的列被更新时,必须要用触发器或存储过程更新这个新列。
总之,存储冗余数据有利于加快访问速度;但违反了第三范式,这会增加维护数据完整性的代价,必须用触发器立即更新、或存储过程或应用代码批量更新,以维护数据的完整性。


--消除昂贵结合
对于频繁同时访问多表的一些主要过程,考虑在主表内存储冗余数据,即存储冗余列或衍生列(它不依赖于主键),但破坏了第三范式,也增加了维护难度。在源表的相关列发生变化时,必须要用触发器或存储过程更新这个冗余列。当主要过程总同时访问两个表时可以合并表,这样可以减少磁盘I/O*作,但破坏了第三范式,也增加了维护难度。对父子表和1:1关系表合并方法不同:合并父子表后,产生冗余表;合并1:1关系表后,在表内产生冗余数据。
------解决方案--------------------
硬件
负载平衡
内存
I/0速度
CPU个数
带宽

软件
表结构(第三泛式)
表架构(分区视图)
索引(簇级和非簇级,小表不创建索引等)
查询技巧(索引的利用)