这是一个基本的网络索引器。
我有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上的逻辑外键 - 因为我相信一个实际关系会失败分区)。
所以我认为我正在查看每个唯一域的分区?如果这是正确的,我该怎么做?是否有任何在线示例不涉及日期字段,而是表上的逻辑外键。
答案 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