📜  聚集和非聚集索引上的 SQL 查询

📅  最后修改于: 2021-09-10 01:25:29             🧑  作者: Mango

先决条件 – 数据库中的索引
索引是一个过程,可以更快地从定义的表中返回您请求的数据。如果没有索引,SQL 服务器必须扫描整个表以查找数据。通过索引,当您通过检查索引页在书中搜索内容时,SQL Server 会执行完全相同的操作。同样,表的索引允许我们在不扫描整个表的情况下定位准确的数据。 SQL 中有两种类型的索引。

  1. 聚集索引
  2. 非聚集索引

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) 

Table: Student_info
ROLL_NO NAME DEPARTMENT
1410110405 H Agarwal CSE
1410110404 S Samadder CSE
1410110403 MD Irfan CSE

输入:
在 Student_info (NAME ASC) 上创建非聚集索引 IX_Student_info_NAME
输出:

Index
NAME ROW_ADDRESS
H Agarwal 1
MD Irfan 3
S Samadder 2

聚集与非聚集索引:

  • 在一张表中只能有一个聚集索引或一个或多个非聚集索引。
  • 在聚集索引中,没有单独的索引存储,但在非聚集索引中,索引有单独的索引存储。
  • 聚集索引比 Non_Clustered 索引慢。