我有一个数据库表,用于存储文件的文件路径和修订号。
请相信以上需要这样,这是我真正问题的缩小范例。
此表的良好聚簇索引是否为“修订号”,因为我总是删除彼此接近的所有修订版?然后我还要为每个文件每天添加相同版本的所有新版本。
答案 0 :(得分:2)
根据Kimberly L. Tripp's Blog,聚集索引应为:
因此,让我们根据这些标准评估您提出的“修订号”。
总之,根据修订号的唯一性,似乎修订号或修订号+文件ID对于聚簇索引来说是个不错的选择。
答案 1 :(得分:0)
除了Joe Stefanelli的答案之外,我还要补充一下:
由于您只获得一个聚簇索引,因此我将根据这些答案定制聚簇索引,以便最好地支持系统要求。一些想法:
如果它是一个很少查询的日常日志,那么仅在RevisionNumber上的聚簇索引就足够了。
如果您报告在给定日期加载的所有文件,则RevisionNumber上的聚集索引将是理想的。
如果您需要以任何频率或权宜之计查找个人文件,那么该索引会很糟糕,因为如果我说得对,那么就会有100,000,000行(文件)每个RevisionNumber - 但FileName上的一个简单的非聚集索引,或FileName + RevisionNumber,将覆盖它(但请参阅下一个想法)。
对于快速查找,FileName,FilePath或FilePath + FileName可能是令人痛苦的长字符串索引。为校验和(FileWhatever)添加列(或持久计算列)并对其进行索引可以节省大量时间。查询必须看起来像:
SELECT FullFileName, Plus, Other, Columns
from FileTable
where RevisionNumber = @TargetRevision
and ChecksumColumn = checksum(@TargetFullFileName)
and FullFileName = @TargetFullFileName
最后,如果你真的每天都要添加和大约100,000,000行,我会认真研究表分区,分区基于RevisionNumber。