创建索引和主键

一、      主建的创建与删除

1.       创建表时同时创建主键(加primary key)

Create Table Book

(

ID int identity(1,1) primary key,

Name nvarchar(50) not null,

StudentID int not null

)

2.       用SQL语句单独创建主键

1)创建主键同时会自动在该主键上创建聚集索引

语句:alter table [表名] add constraint PK_Book_ID primary key (主键列名)

例如:alter table Book add constraint PK_Book_ID primary key (ID)

2)创建主键但不在该主键上创建聚集索引(但会自动创建非聚集索引)

语句:alter table [表名] add constraint PK_Book_ID primary key (主键列名)

例如:alter table Book add constraint PK_Book_ID primary key (ID)

3.       用SQL语句删除主键

语句:alter table [表名] drop constraint [主键名]

例如:alter table Book drop constraint [PK_Book_ID]

二、      索引的创建与删除

1.       创聚集索引

语句:create clustered index [聚集索引名]  on [表名](要创建聚集索引的列名asc|desc) with(drop_existing = on)

例如:create clustered index IX_CLU_Book_ID on Book(ID)

2.       创非集索引

语句:create index [非聚集索引名]  on [表名](要创建非聚集索引的列名 asc|desc) with(drop_existing = on)

例如:create index IX_ Book_Name on Book(Name)

3.       创复合索引

语句:create index [复合索引名]  on [表名](列名1 asc|desc, 列名2 asc|desc) with(drop_existing = on)

例如:create index IX_com_Book_IDName on Book (ID,Name)

4.       创建唯一索引

语句:create unique index index_name on table_name (column ASC|DESC[,.....])with (drop_existing = on)

例如:create unique index IX_Book_ID on Book (ID)

5.       创建覆盖索引

语句:create index index_name on table_Name (columnName ASC|DESC[,......]) include(column_Name_List)with (drop_existing = on)

例如:create index ix_cov_Book_ID_Name on Book (ID) include(Name)

说明:覆盖索引它只是非聚集索引的一种特别形式,是把数据加到非聚集索引上。

覆盖索引和普通非聚集索引的区别:

1)非聚集索引不包涵数据,通过它找到的只是文件中数据行的引用(表是堆的情况下)或是聚集索引的引用,SQL Server要通这个引用去找到相应的数据行。

2)正因为非聚集索引它没有数据,才引发第二次查找。

3)覆盖索引就是把数据加到非聚集索引上,这样就不需要第二次查找了。这是一种以空间换性能的方法。

6.       筛选索引

语句:create index index_name on table_name(columName) where boolExpression

例如:create index IX_Book_ID on Book(ID) where ID>100 and ID< 200

说明:只对热点数据加索引,如果大量的查询只对ID 由 100 ~ 200 的数据感兴趣,就可以这样做。

      1)可以减小索引的大小

2)为据点数据提高查询的性能

7.       删除索引

语句:drop index table_Name.Index_Name

例如:drop index Book. IX_ Book_Name

8.       查看表中索引存储过程

execute sp_helpindex @objname = ‘表名‘

总结:

BTree 索引有聚集与非聚集之分。

就查看上到聚集索引性能比非聚集索引性能要好。

非聚集索引分,覆盖索引,唯一索引,复合索引(当然聚集索引也有复合的,复合二字,只是说明索引,引用了多列),一般非聚集索引就查看上,非聚集索引中覆盖索引的性能比别的非聚集索引性能要好,它的性能和聚集索引差不多,可是它会用更多的磁盘空间。

最后说一下这个

1)with (drop_existing = on|off),加上这个的意思是如果这个索引还在表上就drop 掉然后在create 一个新的。特别是在聚集索引上用使用这个就可以不会引起非聚集索引的重建。

2)with (online = on|off) 创建索引时用户也可以访问表中的数据,

3)with(pad_index = on|off fillfactor = 80); fillfactor 用来设置填充百分比,pad_index 只是用来连接fillfactor 但是它又不能少。

4)with(allow_row_locks = on|off   |   allow_page_locks = on |off);  是否允许页锁 or 行锁

5)with (data_compression = row | page );  这样可以压缩索引大小

时间: 2024-08-09 02:17:20

创建索引和主键的相关文章

Oracle创建表、索引、主键、字段描述

-- 创建表 create table SX04_LBALANCE ( YEAR VARCHAR2(10) not null, PROGRAMNO VARCHAR2(40) not null, FDATE VARCHAR2(10) not null, FACCTCODE VARCHAR2(50) not null, FCURCODE VARCHAR2(3) not null, FAACCCREDIT NUMBER(19,4) default 0 not null, FAENDBAL NUMBER

SQL存储原理及聚集索引、非聚集索引、唯一索引、主键约束的关系(补)

索引类型 1.          唯一索引:唯一索引不允许两行具有相同的索引值 2.          主键索引:为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型.主键索引要求主键中的每个值是唯一的,并且不能为空 3.          聚集索引(Clustered):表中各行的物理顺序与键值的逻辑(索引)顺序相同,每个表只能有一个 4.          非聚集索引(Non-clustered):非聚集索引指定表的逻辑顺序.数据存储在一个位置,索引存储在另一个位置,索引中包含指

唯一索引与主键索引的比较

唯一索引与主键索引的比较 唯一索引唯一索引不允许两行具有相同的索引值.如果现有数据中存在重复的键值,则大多数数据库都不允许将新创建的唯一索引与表一起保存.当新数据将使表中的键值重复时,数据库也拒绝接受此数据.例如,用户表中的身份证(idcard) 列上创建了唯一索引,则所有身份证不能重复 主键索引主键索引是唯一索引的特殊类型.数据库表通常有一列或列组合,其值用来唯一标识表中的每一行.该列称为表的主键.在数据库关系图中为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型.主键索引要求主

003--PowerDesigner创建索引与外键

PowerDesigner创建索引与外键 一.创建索引 双击Table->Columns->创建索引 Step1:双击Table Step2:选择Columns->创建索引 弹出如下窗口: Step3:选择columns标签 Step4:选择Add Columns.. Step5:勾选要作为索引的列即可. 二.创建外键 如有二张表A和表B,A表b_id是外键,指向B表主键b_id                 创建外键方式: 1.A表b_id(外键)与B表b_id(主键)名称相同,可直

通俗易懂 索引、单列索引、复合索引、主键、唯一索引、聚簇索引、非聚簇索引、唯一聚簇索引 的区别与联系

索引 数据库只做两件事情:存储数据.检索数据.而索引是在你存储的数据之外,额外保存一些路标(一般是B+树),以减少检索数据的时间.所以索引是主数据衍生的附加结构. 一张表可以建立任意多个索引,每个索引可以是任意多个字段的组合.索引可能会提高查询速度(如果查询时使用了索引),但一定会减慢写入速度,因为每次写入时都需要更新索引,所以索引只应该加在经常需要搜索的列上,不要加在写多读少的列上. 单列索引 与 复合索引 只包含一个字段的索引叫做单列索引,包含两个或以上字段的索引叫做复合索引(或组合索引).

面试|简单描述MySQL中,索引,主键,唯一索引,联合索引 的区别,对数据库的性能有什么影响(从读写两方面)

索引是一种特殊的文件(InnoDB 数据表上的索引是表空间的一个组成部分),它们 包含着对数据表里所有记录的引用指针. 普通索引(由关键字 KEY 或 INDEX 定义的索引)的唯一任务是加快对数据的访问速度. 普通索引允许被索引的数据列包含重复的值.如果能确定某个数据列将只包含彼 此各不相同的值,在为这个数据列创建索引的时候就应该用关键字 UNIQUE 把它 定义为一个唯一索引. 也就是说,唯一索引可以保证数据记录的唯一性. 主键,是一种特殊的唯一索引,在一张表中只能定义一个主键索引,主键用于

创建表 添加主键 添加列常用SQL语句

--删除主键 alter table 表名 drop constraint 主键名--添加主键alter table 表名 add constraint 主键名 primary key(字段名1,字段名2……)--添加非聚集索引的主键alter table 表名 add constraint 主键名 primary key NONCLUSTERED(字段名1,字段名2……) 新建表: create table [表名] ( [自动编号字段] int IDENTITY (1,1) PRIMARY

聚集索引、非聚集索引、主键

关于这几个概念的理解 首先要知道索引是一种数据结构,这个数据结构是由数据库本身来维护的,当删除.插入.更新数据的时候,索引自身的数据结构也在不断维护中. 索引是基于二叉树的结构来维护的,主要是为了快速检索数据 二叉树结构中有叶节点和非叶节点,叶节点就是没有分支的最后节点,顾名思义就像叶子一样 那么聚集索引,聚集索引的叶节点存储的就是数据本身,这就意味着,聚集索引决定了数据的物理存储顺序.因此聚集索引在单叶节点中是一个连续存储的数据.所以对于between < > 等范围查询,聚集索引效率会很高

SQL Server 创建表 添加主键 添加列常用SQL语句

--删除主键 alter table 表名 drop constraint 主键名 --添加主键 alter table 表名 add constraint 主键名 primary key(字段名1,字段名2……) --添加非聚集索引的主键 alter table 表名 add constraint 主键名 primary key NONCLUSTERED(字段名1,字段名2……) 新建表: create table [表名] ( [自动编号字段] int IDENTITY (1,1) PRIM