聚集索引,非聚集索引的区别是什么

聚集索引,非聚集索引的区别是什么
强烈推介IDEA2021.1.3破解激活,IntelliJ IDEA 注册码,2021.1.3IDEA 激活码  

大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说聚集索引,非聚集索引的区别是什么,希望能够帮助大家进步!!!

创建语法:
create [unique] [clustered|nonclustered] index ix_索引名字 on 表名
(
列1 desc|asc
,列2 desc|asc)
,...
)

unique : 表示是否创建唯一索引,不是必须

聚集索引:表记录的排列顺序和与数据的存储顺序一致(主键),一个表只能有一个,但该索引可以包含多个列(组合索引),就像电话簿按姓氏和名字进行组织一样。 
-->聚集索引规定了数据文件的存储顺序

非聚集索引:表记录的排列顺序和与数据的存储顺序不一致(唯一),一个表可以有多个
-->是一个单独存放的指针表,用来快速找到对应点的地址

 

更形象的说字典的拼音目录就是聚集索引,笔画目录就是非聚集索引。
相同点:都是按照索引查找.
列举三种导致索引不生效的SQL语句写法
(1)对索引列使用了函数或计算
假如表table1的索引列是id,但如下语句会使索引无效
select * from table1 where dbo.fn_fun(id)='xxx'

(2)对索引列使用了Like ‘%X’或Like ‘%X%’
引用上面的表,如下语句也会使索引无效
select * from table1 where id like '%xx%'

(3)在where子句中使用了In(子查询)
如下语句会使索引无效
select * from table1 where id in (select id from table2)

(4)数据类型转换将导致不能利用索引
如下语句会使索引无效
select * from table1 where cast(id as varchar(50))='xxx'

(5)负向比较将导致不能利用索引
如下语句会使索引无效
select * from table1 where 'xxx'=id

 

索引有什么不足?
缺点:过多的索引,在insert、update 和 delete 的时候增加索引的维护成本,降低并发量;

 

聚集索引,非聚集索引的区别是什么

本文来源huayang183,由架构君转载发布,观点不代表Java架构师必看的立场,转载请标明来源出处:https://javajgs.com/archives/18158

发表评论