我正在设计一个SQL Server数据库,需要有相当多的(大约15个)长varchar
个字段,其中大多数我想分配的长度至少为< em> 1024或2048 。由于这显然远远超出 8060 的页面大小,我意识到数据库在访问此表时可能会受到很大的性能影响。
我还考虑将这些叙述分组为类似的主题并制作 3或4个单独的表,或者仅创建一个表varchar(max)
字段和int
代表的表格叙事类型:
create table Narrative
(
narrative varchar(max),
narrativeType int
)
答案 0 :(得分:1)
我不认为我的答案是关于这个问题的最后一句话。也许其他人可能会增加这一点。
由于它的大小,您将无法在VARCHAR(MAX)
列上构建群集或非群集索引。这将使您在桌面上的搜索速度非常慢。
但是,您将能够使用Full Text Search,这将显着提高性能。
就个人而言,如果可以避免,我不会将数据分成多个表。这样做的原因是它使查询同类数据很麻烦。
对于Full Text Search\Indexing
,如果您的文本是多种语言(FTS取决于语言),您可能会想要创建多个表。我通过在我的桌面上创建多个Indexed Views
并在Indexed Views
上构建全文索引来解决这个问题
如果您期望大量数据,可能需要考虑Partitions
最好仔细阅读有关主题的内容,然后进一步完善您的问题。
答案 1 :(得分:0)
我决定继续将这些叙述分成他们自己的表格,与主表格保持1:1的关系。我不怀疑我将永远查询这些varchar
字段中的值,并且不需要对它们进行任何索引。此外,它们的访问频率远低于原始表中的任何其他字段,因此将它们拉入单独的表有助于集中数据库设计,甚至可以提高性能,因为它们只需要在绝对必要时处理