为什么 SQL Server 2012 不能将包含的列添加到现有的非聚集索引
Why can SQL Server 2012 not add an included column to an existing non clustered index
我不明白为什么它不像
那么简单
alter index whatever add included (columnName)
什么会阻止 SQL 服务器将列添加到索引并在 table 的页面中填充值的简单操作?
这不会影响所有索引的排序,只是试图优化 select 语句。我希望我的停机时间可以少于目前删除和重建一组索引所需的 8 小时,但我感到非常失望。
因为包含的列在索引页中,所以目前您有类似的内容:
页
第 1 行:Key 1,Key 2,Inc 1 Row 2:Key 1,Key 2,Inc 1,Row 3:Key 1,Key 2,Inc 1 ...
如果第 1 行从字节 0 开始,第 2 行从字节 x 开始,依此类推
要添加新的包含列,您需要获取每一页,将其分成行添加列,然后重新编写,可能只在一页或多页上,包括来自指向它的前几页 - 实际上你必须完全重写索引所以为什么不重建它。
SQL 服务器建立一个新索引比到处插入小块数据要便宜。
编辑:另外你显然会得到索引碎片,所以你需要重建它
我不明白为什么它不像
那么简单alter index whatever add included (columnName)
什么会阻止 SQL 服务器将列添加到索引并在 table 的页面中填充值的简单操作?
这不会影响所有索引的排序,只是试图优化 select 语句。我希望我的停机时间可以少于目前删除和重建一组索引所需的 8 小时,但我感到非常失望。
因为包含的列在索引页中,所以目前您有类似的内容:
页 第 1 行:Key 1,Key 2,Inc 1 Row 2:Key 1,Key 2,Inc 1,Row 3:Key 1,Key 2,Inc 1 ...
如果第 1 行从字节 0 开始,第 2 行从字节 x 开始,依此类推
要添加新的包含列,您需要获取每一页,将其分成行添加列,然后重新编写,可能只在一页或多页上,包括来自指向它的前几页 - 实际上你必须完全重写索引所以为什么不重建它。
SQL 服务器建立一个新索引比到处插入小块数据要便宜。
编辑:另外你显然会得到索引碎片,所以你需要重建它