我这里添加了包含性列,为啥还必须添加也给索引键列呢?包含性列不是查询字段,索引键列不是order by或者where么,如果我没有where或order by呢?应该就不用添加索引键列了吧?
包含性列基于索引键列,有包含性列那么一定有索引键列,索引键和order by以及什么where没关系,只是查询条件走不走索引罢了!基础还不行,还是首先好好了解索引以及原理,以及各种索引创建的方式!
那我想给UserName添加聚集索引,然后我添加在包含性列里面,那索引键列该添加什么呢?我主键ID和Age都是int类型的,Age没有建立索引。这两个我看都能添加,这怎么选择?
@shuai7boy: 好好学习一下索引基础吧,可以参考我写的SQL Server系列:http://www.cnblogs.com/CreateMyself/category/810461.html
第一关于包含关系即Include,只是返回你查询的列免从基表再查询而导致走KEY查找。索引的创建最起码强调唯一性。你没有实际场景,没有将问题描述清楚,无法给你参考答案。比如你说Age没有创建索引,你是否要返回Age呢?从中也可以看到你对索引知识薄弱,你觉得Age能创建索引?
@shuai7boy: 好好补下基础,基础不行,即使给了你参考答案你也是一知半解!
问题写的不太清楚
首先索引是为了优化查找性能.所以你不用筛选或排序.直接遍历整个表.那索引就是没用的.
然后.在使用了索引以后.如果要查找的列不在索引列表+ID列中.那就会通过ID再去查询那行的数据.来得到要查询的列.而包含性列就可以把那个要查找的列加进来.这样他就不用再去表里查一次了.
如果我想查询UserName,给UserName添加非聚集索引,而且我通过UserName进行排序,然而我添加索引列时,我发现只能添加int类型的,那这个索引键列如何选择?
sql server 还有这个功能呀,我用mysql没听说有这种功能,只能是把要查询的列放到索引里面,这样就能得到索引覆盖查询的效果。
那sql server 这样做的代价就是索引变得更大了,需要更多的存储空间了