MS Sql Server数据库分区
什么是数据库分区?
数据库分区是一种对表的横向分割,Sql server 2005企业版和之后的Sql server版本才提供这种技术,这种对表的横向分割不同于2000中的表分割,它对访问用户是透明的,用户并不会感觉的表被横向分割了。(2000中的表横向分割是建n个表例如按时间建表每月一个表,表名不同,最后需要做一个大视图)
为什么要分区?
显而易见分区是为了提高数据库的读写性能,提高数据库的效率;
分区是否总是可以提高效率?
分区是一把双刃剑,并不总能提高效率,这和具体情况有关系。
之所以有分区技术,分区技术用的好的话可以提高性能,是因为一方面分区把一大块数据分成了n小块,这样查询的时候很快定位到某一小块上,在小块中寻址要快很多;另一方面CPU比磁盘IO快很多倍,而硬件上又有多个磁盘,或者是RAID(廉价磁盘冗余阵列),可以让数据库驱动CPU同时去读写不同的磁盘,这样才有可能可以提高效率。
分区在有些时候并不能提高读写效率,比如说我们经常看到的按照日期字段去分区MSDN例子,这个实例中是按照记录的生成时间来分区的,把一年的数据分割成12个分区,每月一个。这样的分区导致分区并不能实现CPU同步写并提高写入性能,因为在同一个时段CPU总是要写入到最新的那一个分区对应的磁盘中。另一个问题是:这样分区是否可以提高读取性能呢?答案是不一定,要看根据什么字段来查询,如果是根据时间来查询,根据时间生成报表那么这种分区肯定会提高查询的效率,但是如果是按照某个客户查询客户最近1年内的账单数据,这样数据分布到不同的分区上,这样的话效率就不一定能提高了,这要看数据在同一个分区上连续分布的读性能高,还是CPU从几个磁盘上同步读取,然后在合并数据的性能更高一些,这和读取数据的记录数也有关系。
如何分区?用什么字段做分区依据?
具体如何分区和涉及的业务有关系,要看业务上最经常的写入和读取操作是什么,然后再考虑分区的策略。
既然与具体业务相关,我们就假定一个业务环境,假如我们要做一个论坛,对论坛的帖子和回复表进行分区。
论坛中最常见的写操作是1)发帖 2)回复帖子,
最常见的读操作是
1) 根据帖子id显示帖子详情和分页的帖子回复
2) 根据帖子版面帖子列表页根据版面id分页读取帖子列表数据
怎么分区更合适呢?现在还没有准确答案,我有两种可能的方案,写下来,大家讨论看看。
方案1. 根据帖子ID区域段分区(1-300w一个分区、300w-600w一个分区…),这样
相关文档:
8.2 聚合函数的应用
聚合函数在数据库数据的查询分析中,应用十分广泛。本节将分别对各聚合函数的应用进行说明。
8.2.1 求和函数——SUM()
求和函数SUM( )用于对数据求和,返回选取结果集中所有值的总和。语法如下。
SELECT SUM(column_name) ......
大家好!最近又有了一些模块用法的心得,那就是利用模块使你的内存变成一个虚拟的数据库模式,使你可以在没有数据库的情况下,将txt文件的数据进行 sql语句处理,感觉很新鲜吧,不过这个不用感到惊讶,Perl一直是很完美的,哈哈,那我们就来看看这个神奇吧!
需要安装 模块:
SQl::Library;
DBI
下面是程序 ......
远程链接服务器详细配置
--
建立连接服务器
EXEC
sp_addlinkedserver
'
远程服务器IP
'
,
'
SQL Server
'
--
标注存储
EXEC
sp_addlinkedserver
@server
=
'
server
'
,
--
链接服务器的本地名称。也允许使用实例名称,例如MYSERVER\SQL1
@srvproduct
=
'
product_name
......
ansi_warning和ansi_nulls 两个选项必须打开,好像对系统也没啥影响。
楼主再检查一下两个地方,经测试,在要使用分布式事务时,这是必须要设置的。
1、链接服务器和名称解析问题
-- 创建链接服务器
EXEC sp_addlinkedserver 'srv_lnk', 'ms', 'SQLOLEDB', '192.168.1. ......
mdf文件的其他说明: 在微软的SQL Server 2000 数据库有三种类型的文件:
主要数据文件(扩展名.mdf是 primary data file 的缩写)
主要数据文件包含数据库的启动信息,并指向数据库中的其他文件。用户数据和对象可存储在此文件中,也可以存储在次要数据文件中。每个数据库有一个主要数据文件。主要数据文件的 ......