发布时间:2017-09-30编辑:佚名阅读(1834)
索引加快检索表中数据的方法,它对数据表中一个或者多个列的值进行结构排序,是数据库中一个非常有用的对象。
当需要快速找出在某个列中有一特定值的行
例如:有一张person表,其中有2W条记录,记录着2W个人的信息。有一个Phone的字段记录每个人的电话号码,现在想要查询出电话号码为xxxx的人的信息。
如果没有索引,那么将从表中第一条记录一条条往下遍历,直到找到该条信息为;
如果有了索引,那么会将该Phone字段,通过一定的方法进行存储,好让查询该字段上的信息时,能够快速找到对应的数据,而不必在遍历2W条数据了。
使用索引虽然可以提高系统的性能,增强数据检索速度,但它需要占用大量的物理存储空间,建立索引的一般原则如下:
(1)只有表的所有者可以在同一表中创建索引。
(2)每个表中只能创建一个聚集索引。
(3)每个表中最多可以创建249个非聚集索引。
(4)在经常查询的字段上建立索引。
(5)定义text,image,bit数据类型的列上不要建立索引。
(6)在外键上可以建立索引。
(7)在主键列上一定要建立索引。
(8)在那些重复的值比较多,查询较少的列上不要建立索引。
创建索引
--使用CREATE 语句创建索引 CREATE [UNIQUE] [CLUSTERED| NONCLUSTERED] INDEX 索引名 ON 表名(字段名 [ASC|DESC]); CREATE INDEX 索引名 ON 表名(字段名,字段名) INCLUDE(包含列); CREATE PRIMARY KEY INDEX 索引名 ON 表名(字段名) ;---主键索引 --使用ALTER TABLE语句创建索引 ALTER TABLE 表名 ADD INDEX 索引名(字段名列表); ALTER TABLE 表名 ADD UNIQUE(字段名列表); ALTER TABLE 表名 ADD PRIMARY KEY(字段名列表);
UNIQUE——建立唯一索引。
CLUSTERED——建立聚集索引。
NONCLUSTERED——建立非聚集索引。
ASC——索引升序排序。
DESC——索引降序排序。
索引中的包含列
可以将非键列(称为包含列)添加到非聚集索引的叶级别,从而通过涵盖查询来提高查询性能。 也就是说,查询中引用的所有列都作为键列或非键列包含在索引中。 这样,查询优化器可以通过索引扫描找到所需的全部信息,而无需访问表或聚集索引数据。 有关详细信息,请参阅 Create Indexes with Included Columns。
查看索引
EXEC sp_helpindex 表名 -- 查看某个表的索引 SELECT * FROM sys.sysindexes WHERE id=OBJECT_ID('表名');
修改索引名
EXEC sp_rename '表名.旧索引名' '新索引名'
注:要对索引进行重命名时,需要修改的索引名格式必须为“表名.索引名”
删除索引
DROP INDEX 表名.索引名 DROP INDEX 索引名 ON 表名 ALTER TABLE 表名 DROP INDEX 索引名; ALTER TABLE 表名 DROP PRIMARY KEY;
0人
0人
0人
0人