先决条件 – 数据库中的索引
索引是一个过程,可以更快地从定义的表中返回您请求的数据。如果没有索引,SQL 服务器必须扫描整个表以查找数据。通过索引,当您通过检查索引页在书中搜索内容时,SQL Server 会执行完全相同的操作。同样,表的索引允许我们在不扫描整个表的情况下定位准确的数据。 SQL 中有两种类型的索引。
- 聚集索引
- 非聚集索引
1. 集群 –
聚集索引是索引所建立rows.Suppose的物理排序顺序,你有一个表Student_info包含ROLL_NO作为比聚集索引是在该主键将Student_info表进行排序按ROLL_NO创建自主键的类型。聚集索引就像字典一样,字典排序是按字母顺序排列的,没有单独的索引页。
例子:
Input:
CREATE TABLE Student_info
(
ROLL_NO int(10) primary key,
NAME varchar(20),
DEPARTMENT varchar(20),
);
insert into Student_info values(1410110405, 'H Agarwal', 'CSE')
insert into Student_info values(1410110404, 'S Samadder', 'CSE')
insert into Student_info values(1410110403, 'MD Irfan', 'CSE')
SELECT * FROM Student_info
输出:
ROLL_NO | NAME | DEPARTMENT |
---|---|---|
1410110403 | MD Irfan | CSE |
1410110404 | S Samadder | CSE |
1410110405 | H Agarwal | CSE |
如果我们想在其他列上创建聚集索引,那么首先我们必须删除主键,然后我们才能删除以前的索引。
请注意,将列定义为主键会使该列成为该表的聚集索引。要创建任何其他列,首先我们必须按照以下过程删除前一列,聚集索引。
句法:
//Drop index
drop index table_name.index_name
//Create Clustered index index
create Clustered index IX_table_name_column_name
on table_name (column_name ASC)
注意:我们只能在一张表中创建一个聚集索引。
2. 非集群:
非聚集索引是一种与存储在表中的数据分开的索引结构,该表对一个或多个选定的列进行重新排序。创建非聚集索引是为了提高聚集索引未涵盖的常用查询的性能。这就像一本教科书,索引页是在该书的开头单独创建的。
例子:
Input:
CREATE TABLE Student_info
(
ROLL_NO int(10),
NAME varchar(20),
DEPARTMENT varchar(20),
);
insert into Student_info values(1410110405, 'H Agarwal', 'CSE')
insert into Student_info values(1410110404, 'S Samadder', 'CSE')
insert into Student_info values(1410110403, 'MD Irfan', 'CSE')
SELECT * FROM Student_info
输出:
ROLL_NO | NAME | DEPARTMENT |
---|---|---|
1410110405 | H Agarwal | CSE |
1410110404 | S Samadder | CSE |
1410110403 | MD Irfan | CSE |
注意:我们可以在一张表中创建一个或多个 Non_Clustered 索引。
句法:
//Create Non-Clustered index
create NonClustered index IX_table_name_column_name
on table_name (column_name ASC)
ROLL_NO | NAME | DEPARTMENT |
---|---|---|
1410110405 | H Agarwal | CSE |
1410110404 | S Samadder | CSE |
1410110403 | MD Irfan | CSE |
输入:
在 Student_info (NAME ASC) 上创建非聚集索引 IX_Student_info_NAME
输出:
NAME | ROW_ADDRESS |
---|---|
H Agarwal | 1 |
MD Irfan | 3 |
S Samadder | 2 |
聚集与非聚集索引:
- 在一张表中只能有一个聚集索引或一个或多个非聚集索引。
- 在聚集索引中,没有单独的索引存储,但在非聚集索引中,索引有单独的索引存储。
- 聚集索引比 Non_Clustered 索引慢。