默认情况下,SQL Server是否在表的所有列上创建非聚集索引

Pra*_*eth 2 sql t-sql sql-server indexing sql-server-2008

sql server会创建任何默认的非聚集索引吗?我们真的应该把所有FK都作为非聚集索引吗?这里的权衡是什么

OMG*_*ies 9

不,SQL Server不会自动创建非聚集索引.
除非您的CREATE TABLE声明另有说明,否则将根据主键自动创建聚簇索引.

是的,我会建议索引外键列,因为这些是最有可能被JOIN'd /搜索不要使用IN,EXISTS等等.但是,要知道,在低基数的索引设置值(性别为例)会相对没用,因为价值观没有足够的差别.

与所有索引的权衡是它们可以加速数据检索,但减慢数据插入/更新/删除速度.还需要执行维护,因为它们可能会碎片化(如硬盘驱动器),但也可能不会随着时间的推移而被使用.索引也占用了驱动器空间.