| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1447 人关注过本帖
标题:数据库设计的优化策略-1(转贴)
只看楼主 加入收藏
marydan
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2006-2-14
收藏
 问题点数:0 回复次数:6 
数据库设计的优化策略-1(转贴)
前言:
这是我在sql.462000.com上,下载了一个视频讲座时,边听边做的笔记,在我们的这个论坛里发出来,希望对大家有所帮助,这只是其中的一部分,还有其他的,我没下载完。


概述:
1、优化和调优
2、数据库本身的考虑
3、表设计的考虑
4、T_SQL的考虑
5、索引的考虑


1、优化起于设计阶段,调优起于运行阶段

2、sql server的调优
1)服务器os和hardware的调优(包括os和hardware的耦合度问题)
2)sql server服务的调优
3)数据库设计的调优
4)应用程序设计的调优(主要的)
例如:少使用游标

3、监视增长

数据库大小 增长的大小(10%) 增长所需时间(s)

1000MB 100MB 6
1100MB 110MB 7
1210MB 121MB 8
1330MB 133.1MB 9

以上实验是在2-CPU的机器上的统计数据,如果是CPU机器,不光时间会大大延长,而且CPU的利用率也会持续高位运行。而且如果数据库的自动增长发生在用户使用的高峰期,那么8~9秒的延迟是很难忍受的。所以,建议,监视数据库的使用,当空间使用达到80%或某个规定值,可以让系统给dba发一封邮件,由dba在非高峰期的时候,手工增长数据库大小。

搜索更多相关主题的帖子: 数据库设计 SQL 服务器 sql hardware 
2006-02-15 10:44
卜酷塔
Rank: 7Rank: 7Rank: 7
来 自:魅力青岛
等 级:禁止访问
威 望:39
帖 子:2569
专家分:0
注 册:2004-6-12
收藏
得分:0 

感觉内容上有点少,希望继续努力!


觉得为时已晚的时候,恰恰是最早的时候。

2006-02-15 10:50
marydan
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2006-2-14
收藏
得分:0 
4、很多人都有这样的疑问,是为每个应用配置一个数据库,还是全部放在一个数据库里只是表的数量多一些

建议尽量为每个应用配置一个数据库
1) 可以降低风险,各个数据库相互独立,对某个的操作不会影响到其他的数据库,损坏某个控制文件,不用影响到全部。
2) 减少备份和恢复的时间,尤其是数据量很庞大的时候,这个优势就更加的明显。
3)宜于监视和管理。

5、只读数据库
可以考虑把历史数据放到只读数据库中,来提高性能(节省了很多锁的开销),还可以用Union all来把这些数据和当前数据合并。

6、数据类型的考虑
1)decimal numeric
尽量使用decimal
2)bigint ,int, smallint ,tinyint
int是速度和应用最适宜的,如果不太在乎存储的话。
int 范围是2147 483 647
3)float只应该用于科学计算,尽量少用
4)varchar ,char
从性能上来讲,char更好;从节省存储来讲,varchar更好
建议10个字节以上用varchar,以下用char
5)要不要n
nvarchar用于参出Unicode的数据,它更占空间,而且处理更慢,能不用就不用。
6)test ,image
如果较大的话,最好用varchar指向image


我的眼里只有你
2006-02-15 10:57
marydan
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2006-2-14
收藏
得分:0 
阿还没发完呢

阿一个字一个字的敲,想着多发几次,怕中间出什么问题,全没有了,呵呵:)

我不喜欢你说话语气,你23,我24呢,比你大:(

我的眼里只有你
2006-02-15 11:00
marydan
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2006-2-14
收藏
得分:0 
7、数据库模型的优化考虑
1)少许的反范式denormalization,对性能很有帮助;
2)让应用程序多做些工作
3)对程序进行水平划分DPV
4)不要用触发器来维护主外键关系,要用约束
5)可以考虑用程序来维护引用完整性
6)避免在标识列中创建聚集索引
7)可能的话,不要让列为null

8、行的大小
1)数据页可用空间为8k,行的大小不能超过这个
2)避免所设计的行大小为4k或者4k多一点,这样浪费很大
3)对一个有着百万行的表而言,行的大小可能会很大的影响着性能
4)最小化多余的列空间

9、test ,image的使用
test in row 可以把较小的数据存放在行的实际数据页中
sp_tableoption 'table1','test in row','512'

10、尽可能多的采用存储过程
1)最好的性能
2)只需在服务器端改变代码,维护成本小
3)在存储过程语句头放set nocount on
4) 对象名用dbo.tablename,避免重编译
5)不要用sp_前缀
6)参数保持简 洁,必要时用大参数
7)复杂存储过程最好分为多个独立的存储过程
8)尽量使用表变量而不是临时表,临时表占tempdb空间,表变量占内存空间,所以,还要考虑系统内存量

我的眼里只有你
2006-02-15 11:13
marydan
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2006-2-14
收藏
得分:0 
11、tempdb数据库的考虑
用多个驱动器存放(并行读写),分配足够空间,避免自己增长

12、查询使用索引;
where字句少用or,<>,!=,!<,!>,is null,not,not exists,not in,not like,容易造成全表扫描;
避免用cursor;
避免用union,而用union all
select 列表中避免用*和不需要的列
order by 和distinct 在有聚集索引的情况下才会有较好性能,注意使用
exists 和in 查不多快
好好用top

13、优化索引
1)定期重建索引
dbcc showcontig 显示制定的表的数据和索引的碎片信息
dbcc dbreindex 重建索引
2)索引碎片整理
dbcc indexdefrag
3)使用索引优化向导

我的眼里只有你
2006-02-15 11:22
marydan
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2006-2-14
收藏
得分:0 
还有一句,好好使用truncate table
至于怎么用,大家查下sql server联机丛书就知道了,恕不赘述:)

这个讲座下载地址是
http://www.sqlcn.net/bbs/forumdisplay.php?fid=8
他们现在换域名了,以前是sql.462000.com

做这个讲座的是微软一个资深讲师,我不记得名字了:)

我的眼里只有你
2006-02-15 11:28
快速回复:数据库设计的优化策略-1(转贴)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.047783 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved