我最近提出了这个问题:MS SQL如何在表之间共享标识种子(许多人想知道为什么)
我有一个如下所示的表布局:
Table: Stars
starId bigint
categoryId bigint
starname varchar(200)
但我的问题是,我有数百万行。因此,当我想从Stars表中删除星星时,它对SQL Server来说太过于强烈。
我不能使用2005+内置的分区,因为我没有企业许可证。
但是,当我删除时,我总是一次性删除整个类别ID。
我想做这样的设计:
Table: Star_1
starId bigint
CategoryId bigint constraint rock=1
starname varchar(200)
Table: Star_2
starId bigint
CategoryId bigint constraint rock=2
starname varchar(200)
通过这种方式,我可以通过简单的删除表来删除整个类别,从而以O(1)的速度处理数百万行。
我的问题是:在SQL Server中拥有数十万个表是否会产生问题? O(1)的删除对我来说非常可取。也许有完全不同的解决方案我没有想到吗?
编辑:
插入后星星是否会被修改?否。
您是否必须跨星级别查询数据?我从未跨星级别查询过。
如果您正在查找特定星星的数据,您是否知道要查询哪个表?是的。
输入数据时,应用程序将如何决定将数据放入哪个表中?在创建categoryId时一次性插入星形数据。
会有多少个类别?您可以假定会有无限星级类别。每天最多可达100个星级类别,每天最多可达30个不需要的星级类别。
您真的需要删除整个类别还是仅更改了数据的星级?是整个星级类别。
您尝试过分批删除吗?是的,我们今天就这样做,但效果不够好。
另一种技术是标记要删除的记录?没有必要标记一个星级为已删除,因为我们知道整个星级类别都可以删除。
其中有多少比例从未使用过?通常情况下,我们保留每个星级类别的数据几周,但有时需要保留更久。
当您认为某个类别有用时,它永远有用吗,还是可能以后需要删除?
不是永久的,而是直到发出手动请求删除该类别为止。如果是这样,有多少时间需要删除?并不经常。
您正在使用何种磁盘排列?目前是单个文件组存储且没有分区。
您能使用 SQL 企业版吗?不行。许多人都在运行此软件,他们只有 SQL 标准版。购买 MS SQL 企业版超出了他们的预算。