数据库管理及优化浅谈(MS SQL Server)
数据库管理
说起数据库管理——————首先要说的就是数据库设计,一个好的数据库设计理念能避免很多数据库引起的麻烦和后期维护的成本
1、首先要考虑的就是数据库权限和安全,首先有条件优先考虑的是将数据库部署在数据库集群,当然数据量不大冲从成本上考虑可以是不建议使用的
权限这个主要是登陆用户权限和架构合理搭配,最好一个架构对应一个用户名,方便后期规范和维护
2、说完数据库的权限下面当然是主要存储数据,数据怎么存,应该怎么规范,索引如何建立,后期数据量超大,该怎么分区,相信这些都是很多小伙伴心中的难题
(1)怎么存储数据和规范数据? 作为一个数据库的设计者,首先在数据量的问题上不要止步于眼前的数据量,而是尽可能的最大评估数据量,甚至超出十倍百倍的评估数据量,对数据库进行设计,然后规范数据:提炼需要存储的数据,尽量减少沉于数据,然后对操作频繁的表进行合理的建立索引。这样对于前期数据库搭建这样浩瀚的工程就算完成了。当然我这建库说的不是很详细,比如每一个表都要有唯一主键或者混合主键、数据库文件放在那里等这些我就不一一说了。
当然在这里小何告诉大家一个小常识:设计数据库理最好不能有物理删除的就是我们常说DELETE,而是用删除标志代替DELETE。在这就不要问我为什么了,好不好大家用了就知道了
(2)如何建立索引? 这个大家不要觉得就是谁便建立一个索引就好了,小何在这里就告诉大家 不是这样的,大家觉得上亿的的数据多么?查询是不是很头疼? 小何告诉大家近亿的数据查询秒秒钟的事情,当然这里不是全部查出来,而是按照某个条件查询少量的数据了。知道为啥那么牛逼么?就是应为我索引建的好。经常看到很多人在网上发表说百万千万的数据量都在说很大了,我说,你们可以好好研究下索引的,而不是什么分区更有甚者说数据仓库能解决这个问题。
(3)什么时候时候分区??该怎么分区?一般一个表数据超过10G就可以分区了,这样查询也会快些,而且也方便管理。
分区的方法主要有三种 范围分区 、Hash分区(散列分区) 、复合分区
范围分区就是对数据表中的某个值的范围进行分区,根据某个值的范围,决定将该数据存储在哪个分区上。如根据序号分区,根据业务记录的创建日期进行分区等。 不好之处就是后期可能造成分布不均匀维护成本增加
Hash分区(散列分区)为通过指定分区编号来均匀分布数据的一种分区类型,因为通过在I/O设备上进行散列分区,使得这些分区大小一致。
复合分区 有时候我们需要根据范围分区后,每个分区内的数据再散列地分布在几个表空间中,这样我们就要使用复合分区。复合分区是先使用范围分区,然后在每个分区内再使用散列分区的一种分区方法,如将物料交易的记录按时间分区,然后每个分区中的数据分三个子分区,将数据散列地存储在三个指定的表空间中
小何的数据库浅谈就到这里了!!!!!!
下面给大家提供商一些数据库调优方向看到此文章的伙伴能有一些方向
1、存储 将硬盘分成NTFS格式,NTFS比FAT32快,并看你的数据文件大小,1G以上你可以采用多数据库文件,这样可以将存取负载分散到多个物理硬盘或磁盘阵列上。
2、tempdb tempdb也应该被单独的物理硬盘或磁盘阵列上,建议放在RAID 0上,这样它的性能最高,不要对它设置最大值让它自动增长
3、日志文件 日志文件也应该和数据文件分开在不同的理硬盘或磁盘阵列上,这样也可以提高硬盘I/O性能。
4、分区视图 就是将你的数据水平分割在集群服务器上,它适合大规模OLTP,SQL群集上,如果你数据库不是访问特别大不建议使用。
5、簇索引 你的表一定有个簇索引,在使用簇索引查询的时候,区块查询是最快的,如用between,应为他是物理连续的,你应该尽量减少对它的updaet,应为这可以使它物理不连续。
6、非簇索引 非簇索引与物理顺序无关,设计它时必须有高度的可选择性,可以提高查询速度,但对表update的时候这些非簇索引会影响速度,且占用空间大,如果你愿意用空间和修改时间换取速度可以考虑。
7、索引视图 如果在视图上建立索引,那视图的结果集就会被存储起来,对与特定的查询性能可以提高很多,但同样对update语句时它也会严重减低性能,一般用在数据相对稳定的数据仓库中。
8、维护索引 你在将索引建好后,定期维护是很重要的,用dbcc showcontig来观察页密度、扫描密度等等,及时用dbcc indexdefrag来整理表或视图的索引,在必要的时候用dbcc dbreindex来重建索引可以受到良好的效果。
不论你是用几个表1、2、3点都可以提高一定的性能,5、6、8点你是必须做的,至于4、7点看你的需求。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。