我不明白为什么它不像
那么简单alter index whatever add included (columnName)
什么会阻止这是一个简单的SQL Server操作,它会将列添加到索引并填充表中页面的值?
这不会影响所有索引的排序,只是尝试优化select语句。我希望我可以减少停机时间,而不是目前需要8小时才能放下并重建一套索引,但我感到非常失望。
答案 0 :(得分:3)
因为包含的列位于索引页面中,所以目前您有类似的内容:
页 第1行:键1,键2,Inc 1第2行:键1,键2,Inc 1,第3行:键1,键2,Inc 1 ......
如果第1行从字节0开始,第2行在字节x,等等
要添加新的包含列,您需要获取每个页面,将其分成行添加列然后重新编写它,可能只在1页或超过1页,包括前几页的元数据这指向它 - 实际上你必须完全重写索引,所以为什么不重建它。
SQL Server构建新索引比在这里和那里插入少量数据更便宜。
编辑:你显然会得到索引碎片,所以你需要重建它