SQL之索引

来源:互联网 发布:社交软件头像 编辑:程序博客网 时间:2024/04/30 05:37

 

/*索引*/



--索引是对数据库表中一个或多个列的值进行排序的结构
--索引提供指针以指向存储在表中指定列的数据值,然后根据指定的排序次序排列这些指针 


/*查询指定的数据库有多少张表*/

       
select object_id('employee')


--获得指定database对象的ID,如果该对象不存在,返回NULL


select name from syscolumns where id=object_id('employee')

--返回指定表的字段


select name from sysobjects where xtype='U'

--返回指定数据库的用户表
--xtype表类型,U表示用户表


/*索引分类*/

--表中各行的物理顺序与键值的逻辑(索引)顺序相同称为聚集索引 。表只能包含一个聚集索引 
--非聚集索引指定表的逻辑顺序。


select * from sysindexes where name='lecky'

--sysindexes 查询指定表的索引
--0表示无索引
--name为索引名


/**主键不允许添加在允许为空的字段**/


--创建表的时候,如果指定了主键,那么SQL自动在主键列上面创建聚集索引,
--索引的名称和主键约束的名称相同


/*sysindexes*/

--数据库中的每个索引和表在表中各占一行
--该表存储在每个数据库中
--表 indid字段表示索引 ID
 --1 = 聚集索引
 -->1 = 非聚集
 --255 = 具有 text 或 image 数据的表条目


/*创建索引的指导原则*/

--适合创建索引情况:
----该列频繁用于进行搜索。
----该列用于对数据进行排序。
--不适合创建索引情况:
----列中仅包含几个不同的值。
----表中仅包含几行。


/*创建索引*/

CREATE [UNIQUE] [CLUSTERED|NONCLUSTERED] 
 
INDEX index_name 
 
ON table_name(column_name[, column_name]…)

--在允许为空的列上创建聚合索引
--可录入相同数据,说明聚集索引不一定唯一,二者没有直接关系
--默认创建非聚集,不唯一的索引


/*查询索引*/

select * from sysindexes where name='index_name'


/*非聚集索引*/

--非聚集索引指定表的逻辑顺序。数据存储在一个位置,索引存储在另一个位置,索引中包含指向 数据存储位置的指针。
--一个表可以有多个(最多249个)非聚集索引