Sql server 没有Where子句的非常大的静态表

Sql server 没有Where子句的非常大的静态表,sql-server,clustered-index,Sql Server,Clustered Index,我有一个有230列的2亿记录的静态人口统计表。没有索引,也没有任何唯一的单独列 此表具有ZIP(varchar(5))和STREET NUMBER(varchar(10))列,这些列将用于此表的几乎所有联接 永远不会有Where子句,因为此表用作针对单个客户端表的“匹配”平台。客户机表可以是从20K到300万行的任意位置,并且还将有一个ZIP和Street number列。因此,我的连接至少包括:ZIP=ZIP和STREET\u NO=STREET\u NO。还有其他连接条件,但它们将使用函数等

我有一个有230列的2亿记录的静态人口统计表。没有索引,也没有任何唯一的单独列
此表具有
ZIP(varchar(5))
STREET NUMBER(varchar(10))
列,这些列将用于此表的几乎所有联接

永远不会有Where子句,因为此表用作针对单个客户端表的“匹配”平台。客户机表可以是从20K到300万行的任意位置,并且还将有一个ZIP和Street number列。因此,我的连接至少包括:
ZIP=ZIP
STREET\u NO=STREET\u NO
。还有其他连接条件,但它们将使用函数等进行模糊匹配。
SELECT
子句是动态的,包含任意数量的列,因此覆盖索引似乎不实用

我可以自由地在这个庞大的表上添加索引。到目前为止,我添加了ID标识主键,以提供聚集索引。然后我在(ZIP,街道号)上添加了一个非聚集索引

但是,我不确定代理键上的聚集索引是否必要,因为这是静态数据

我是否最好在(ZIP,STREET NO)上创建聚集索引,因为永远不会有Where子句,这是一个连接问题?每当我运行一个查询并认为这可能是可疑的时候,我就会在当前集群ID列上看到很多书签查找(在执行计划中占80%的执行时间)


感谢您的回复。

在您决定是否使用聚集索引或非聚集索引之前,请测试所有可能访问表的查询类型。您可能还需要考虑在外键列和用于搜索参数的列和分组和排序中建立索引。测试可能的索引时,请确保包含所有数据修改操作

因此,运行您的查询并让SQL Server优化器完成它的工作!他会告诉你需要做什么(在哪里创建索引以及什么类型)来加快查询速度