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

sql大数据量存储结构问题
我们现在做了一个系统,用的是SQL   SERVER   2000   ,有一个表中平均每天要插入5000条记录。现在运行3个月就70万条记录了,现在速度很慢。
我考虑将2个办法
1,数据分离出来,可以将几个月以前的数据分离出来,定期导到和这个表结构一样的表。但所有查询以前的数据都要开发界面
2,通过hash   表建几个同样结构的表,数据分别存到几个表中,这样就不用分离了。
这只是想法,并没有开始做,谁做过,或者有更好的方法,请赐教!

------解决方案--------------------
2000也有的,下面是一段联机帮助,楼主看完后,就知道怎样建立分区表以及对应的分区视图了.

创建分区视图
分区视图在一个或多个服务器间水平连接一组成员表中的分区数据,使数据看起来就象来自一个表。Microsoft® SQL Server™ 2000 区分本地分区视图和分布式分区视图。在本地分区视图中,所有的参与表和视图驻留在同一个 SQL Server 实例上。在分布式分区视图中,至少有一个参与表驻留在不同的(远程)服务器上。此外,SQL Server 2000 还区分可更新的分区视图和作为基础表只读复本的视图。

分布式分区视图可用于实现数据库服务器联合体。联合体是一组分开管理的服务器,但它们相互协作分担系统的处理负荷。这种通过分区数据形成数据库服务器联合体的机制使您能够扩大一组服务器,以支持大型的多层 Web 站点的处理需要。有关更多信息,请参见设计联合数据库服务器。

在实现分区视图之前,必须先水平分区表。原始表被分成若干个较小的成员表。每个成员表包含与原始表相同数量的列,并且每一列具有与原始表中的相应列同样的特性(如数据类型、大小、排序规则)。如果正在创建分布式分区视图,则每个成员表分别位于不同的成员服务器上。为了获得最大程度的位置透明度,各个成员服务器上的成员数据库的名称应当是相同的,但不要求非这样。例如:Server1.CustomerDB、Server2.CustomerDB、Server3.CustomerDB。

成员表设计好后,每个表基于键值的范围存储原始表的一块水平区域。键值范围基于分区列中的数据值。每一成员表中的值范围通过分区列上的 CHECK 约束强制,并且范围之间不能重叠。例如,不能使一个表的值范围从 1 到 200000,而另一个表的值范围从 150000 到 300000,因为这样将不清楚哪个表包含 150000 与 200000 之间的值。

例如,正在将一个 Customer 表分区成三个表。这些表的 CHECK 约束为:

-- On Server1:
CREATE TABLE Customer_33
(CustomerID INTEGER PRIMARY KEY
CHECK (CustomerID BETWEEN 1 AND 32999),
... -- Additional column definitions)

-- On Server2:
CREATE TABLE Customer_66
(CustomerID INTEGER PRIMARY KEY
CHECK (CustomerID BETWEEN 33000 AND 65999),
... -- Additional column definitions)

-- On Server3:
CREATE TABLE Customer_99
(CustomerID INTEGER PRIMARY KEY
CHECK (CustomerID BETWEEN 66000 AND 99999),
... -- Additional column definitions)

在创建成员表后,在每个成员服务器上定义一个分布式分区视图,并且每个视图具有相同的名称。这样,引用分布式分区视图名的查询可以在任何一个成员服务器上运行。系统操作如同每个成员服务器上都有一个原始表的复本一样,但其实每个服务器上只有一个成员表和一个分布式分区视图。数据的位置对应用程序是透明的。

生成分布式分区视图的方式如下:

在每一个含有在其它成员服务器上执行分布式查询所需连接信息的成员服务器上添加链接服务器定义。这将使得分布式分区视图能够访问其它服务器上的数据。


对于在分布式分区视图中使用的每个链接服务器定义,使用 sp_serveroption 设置 lazy schema validation 选项。这确保了只有在实际需要远程成员表的数据时,查询处理器才请求任何链接表的元数据,从而使性能得到优化。


在每个成员服务器上创建分布式分区视图。这些视图使用分布式 SELECT 语句访问链接成员服务器上的数据,并将分布式行与本地成员表的行合并。
若要为上一个示例创建分布式分区视图,应当:

为 Server2 添加一个名为 Server2 的、带有连接信息的链接服务器定义,并添加一个名为 Server3 的链接服务器定义以访问 Server3。


创建以下分布式分区视图:
CREATE VIEW Customers AS
SELECT * FROM CompanyDatabase.TableOwner.Customers_33
UNION ALL
SELECT * FROM Server2.CompanyDatabase.TableOwner.Customers_66
UNION ALL
SELECT * FROM Server3.CompanyDatabase.TableOwner.Customers_99

在 Server2 和 Server3 上执行相同的步骤。
可更新的分区视图
如果本地或分布式分区视图为不可更新的,则它只能作为原始表的只读复本。可更新的分区视图可展示出原始表的所有功能。

在下列情况中,视图被视为可更新的分区视图:

视图是一组 SELECT 语句,这些语句的结果集通过 UNION ALL 语句组合为一个结果集。每个 SELECT 语句引用一个 SQL Server 基表。该表可以是本地表,也可以是使用 4 部分名称、OPENROWSET 函数或 OPENDATASOURCE 函数引用的链接表(不能使用 OPENDATASOURCE 或 OPENROWSET 函数指定直接传递式查询)。
表规则
成员表在视图定义中的每个 SELECT 语句的 FROM 子句中定义。每个成员表都必须遵守如下规则:

在视图中每个成员表只能引用一次。


成员表不能有任何计算列上创建的索引。


成员表在数目相同的列上应具有所有 PRIMARY KEY 约束。


成员表必须有相同的 ANSI 填充设置。有关 ANSI 填充设置的更多信息,请参见 SET ANSI_PADDING。
列规则
列在视图定义中的每个 SELECT 语句的选择列表中定义。列必须遵守如下规则。

每个成员表中的所有列必须包含在选择列表中。


在选择列表中不能多次使用同一列。


在选择列表中对列的引用不能多于一次。


列必须位于选择列表中的相同序号位置处。


每个 SELECT 语句的选择列表中的列必须是同一类型(包括数据类型、精度、小数位数和排序规则)。例如,以下视图定义失败,这是因为两个 SELECT 语句中首列的数据类型不同:
CREATE VIEW NonUpdatable
AS
SELECT IntPrimaryKey, IntPartNmbr
FROM FirstTable