我有一个包含15列的表 - 所有类型都是int,nvarchar或datetime。我希望能够找到与6个nvarchar列和1个datetime列中的值匹配的行。存储过程将执行选择并返回行。我的问题是我应该如何创建一个索引,以便选择最佳?每列有7列或7个独立索引的一个索引?有关系吗?选择中的WHERE子句的顺序是否与索引列的顺序相关?
修改
知道select的目的是找到1或0条记录可能会有所帮助。定义唯一记录需要6列,而日期时间列用于在过去X天内查找该记录。
编辑2
目前,表格中没有数据。该表的目的是确定是否已对某个客户执行某些操作。在每个操作之前,我将在表中查找包含这7个列值的记录。如果没有记录,我将执行操作然后插入记录。如果有记录,我将跳到下一个动作并重复该过程。
鉴于此表中将有大量插入,索引将经常重建。
谢谢!
答案 0 :(得分:2)
编辑2:既然你澄清了你的问题,我可以给出一个更具体的答案。
您想要一个包含六列的索引。
对于datetime列我仍然有点困惑。你说六列定义了唯一的条目。如果它们对于整个表是唯一的,则在索引和查询中都不需要datetime值。如果它们仅在给定日期内是唯一的,则需要将其包含在索引(总共七列)和查询中。
六/七列索引作为聚簇索引可能不可行(特别是如果你想创建其他索引),所以如果你还没有聚簇索引,那么创建一个,最好是在auto上-id列。聚簇索引应该尽可能小,唯一并且总是在上升,因为它会影响表和其他索引的存储方式。
六/七列索引应标记为唯一,不包含任何其他列。如果可能,应按照索引在每个插入上生成上升值的方式对列进行排序,因为这将限制或最好地消除碎片,从而提高I / O性能。
根据您的描述,这是我能给您的最佳建议。