日期:2014-05-17  浏览次数:20729 次

咨询几个关于索引方面的问题
由于之前做开发并未太多的接触过数据库优化方面的知识,所以对数据库里面的索引知识也只是了解一些皮毛。但最近因为需要,所以恶补了一下这方面的知识,但是看了网上太多关于索引的文章,还是有点似懂非懂的,所以特地来这里向大牛门咨询一下。


问1:我们在设计数据库表时,都会设置一个自增长的int型的ID作为主键,那么这个时候生成主键的同时也会生成一个默认的聚集索引,用来作为物理排序标准。那么这个时候,这张表是不是不能够再创建另外的聚集索引了,因为同一个表只能够有一个聚集索引,如果想要在另外的字段上建聚集索引的话,前题得把默认主建上的聚集索引去掉?


问2:我们在通过Create index创建索引的时候,如果不指定unique|clustered|nonclustered这三个关建字的话,那这个索引是不是就默认为非聚集索引?比如这个语法:create index ix_jobNumber on person (JobNumber asc)


问4:有一个Person表,表里有一千一百万条数据,表内有一Name字段,通过统计,里面共计有132个人名,但每个人名所产生的记录数,少的有3条,多的则有40万条,最常用的查询是软件通过分页查询出Name字段下的某个人名,那么这个字段是否值得建索引?


问5:如果创建一个unique非聚集索引,那个在这个字段下是否能够插入重复的值?

------解决方案--------------------
index scan是索引扫描,性能上来说和表扫描无疑,index seek是非聚集索引查找,性能相对快很多。最快的还是聚集索引查找clustered index seek
------解决方案--------------------
Table Scan --> 全表扫描

Index scan --> 索引扫描

Index Seek --> 索引查找

SQL引擎会自动选择最佳的执行计划.