数据库分区新手 - 基本Web Indexer运行缓慢

时间:2013-12-17 10:04:09

标签: sql-server database partitioning

这是一个基本的网络索引器。

我有2个数据库表:

的domainlist:

PK domainName
UI domainNumber
   status  ...  start, indexing, completed.

domainPages

PK pageNumber
FK domainNumber
   pageHTML
   pageTitle

我有几个“索引器”服务器,用于加载网站HTML并将其存储到数据库中。

随着数据库变大,数据库现在大幅放缓。

INSERT INTO domainPages (domainNumber,domainPageHTML,domainPageTitle VALUES ('" & domainNumber & "',N'" & domainPageHTML & "',N'" & domainPageTitle & "')")

由于行数很多,这需要很长时间。从桌子上读书也需要很长时间。

我可以为每组domainPages创建一个新表,但我宁愿尝试新的东西:我正在寻找数据库分区来帮助。

'net about partitioning'上的所有示例都使用了一个日期字段,这里我需要对domainPages表中的domainNumber进行分区(这是domainList上的逻辑外键 - 因为我相信一个实际关系会失败分区)。

所以我认为我正在查看每个唯一域的分区?如果这是正确的,我该怎么做?是否有任何在线示例不涉及日期字段,而是表上的逻辑外键。

1 个答案:

答案 0 :(得分:0)

我对这个问题没有答案,所以我不得不为每个域使用单独的表。这意味着浏览所有表格需要一段时间!

我确实发现了这个http://blog.sqlauthority.com/2008/01/25/sql-server-2005-database-table-partitioning-tutorial-how-to-horizontal-partition-database-table/,这是我需要的。这是任何寻找未来的人。

我没试过,但我认为对于更高的ID你会运行另一个功能,例如一旦ID达到500,就像在这个例子中一样:

  --Determine where values live before new partition
SELECT $PARTITION.Left_Partition (501)  --should return a value of 4

--Create new partition
ALTER PARTITION FUNCTION Left_Partition ()
SPLIT RANGE(500)

--Determine where values live after new partition
SELECT $PARTITION.Left_Partition (501)  --should return a value of 5 

根据this article,请参阅:考虑图2中创建的表。您可以向此表添加一个新分区,以包含大于500的值,如下所示。

http://technet.microsoft.com/en-gb/magazine/2007.03.partitioning.aspx