SQL中一个表可以有几个聚集索引或非聚集索引?

SQL中一个表可以有几个聚集索引或非聚集索引?,第1张

一个表只能有一个聚集索引,可以有多个非聚集索引\x0d\x0a\x0d\x0a下面是聚集索引和非聚集索引的详细介绍:\x0d\x0a聚集索引基于数据行的键值在表内排序和存储这些数据行。每个表只能有一个聚集索引,因为数据行本身只能按一个顺序存储。有关聚集索引体系结构的详细信息,请参阅聚集索引结构。\x0d\x0a\x0d\x0a每个表几乎都对列定义聚集索引来实现下列功能:\x0d\x0a\x0d\x0a可用于经常使用的查询。\x0d\x0a\x0d\x0a提供高度唯一性。 \x0d\x0a\x0d\x0a注意:\x0d\x0a\x0d\x0a创建 PRIMARY KEY 约束时,将在列上自动创建唯一索引。默认情况下,此索引是聚集索引,但是在创建约束时,可以指定创建非聚集索引。\x0d\x0a\x0d\x0a可用于范围查询。\x0d\x0a\x0d\x0a如果未使用 UNIQUE 属性创建聚集索引,数据库引擎将向表自动添加一个 4 字节的 uniqueifier \x0d\x0a列。必要时,数据库引擎将向行自动添加一个 uniqueifier 值以使每个键唯一。此列和列值供内部使用,用户不能查看或访问。\x0d\x0a\x0d\x0a查询注意事项\x0d\x0a\x0d\x0a在创建聚集索引之前,应先了解数据是如何被访问的。考虑对具有以下特点的查询使用聚集索引:\x0d\x0a\x0d\x0a使用运算符(如 BETWEEN、>、>=、 回答于 2022-11-16

--创建非聚集索引

create nonclustered index inx_entry_stock_on entry_stock_d(entry_stock_bi) --创建聚集索引

create clustered index inx_entry_stock_bi on entry_stock_d(entry_stock_bi)

 

--主键

alter table entry_stock_d add primary key nonclustered--主键且非聚集

( entry_stock_bi,aid)

InnoDB按照主键进行聚集,如果没有定义主键,InnoDB会试着使用唯一的非空索引来代替。如果没有这种索引,InnoDB就会定义隐藏的主键然后在上面进行聚集。

所以,对于 聚集索引 来说,你创建主键的时候,自动就创建了主键的聚集索引。

而普通索引(非聚集索引)的语法,大多数数据库都是通用的:

CREATE INDEX Syntax

CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name

[index_type]

ON tbl_name (index_col_name,...)

[index_type]

index_col_name:

col_name [(length)] [ASC | DESC]

index_type:

USING {BTREE | HASH | RTREE}

[java] view plaincopy

-- 创建无索引的表格

create table testNoPK (

id int not null,

name varchar(10)

)

-- 创建普通索引

create index IDX_testNoPK_Name on testNoPK (name)


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11634689.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存