MySQL----主键、唯一、普通索引的创建与删除

创建索引

CREATE INDEX index_name
ON table_name (column1 [ASC|DESC], column2 [ASC|DESC], ...);
  • CREATE INDEX: 用于创建普通索引的关键字。
  • index_name: 指定要创建的索引的名称。索引名称在表中必须是唯一的。
  • table_name: 指定要在哪个表上创建索引。
  • (column1, column2, …): 指定要索引的表列名。你可以指定一个或多个列作为索引的组合。这些列的数据类型通常是数值、文本或日期。
  • ASC和DESC(可选): 用于指定索引的排序顺序。默认情况下,索引以升序(ASC)排序。

创建索引的条件

  • 查询频繁的字段应该作为索引。索引的目的就是提高检索效率,如果某个字段被频繁使用,使用字段作为检索条件时就有必要提高检索效率。

  • 更新频繁的字段不适合作为索引。索引的高效是以增删改的效率为代价的。

  • 不作为检索条件的,不适合作为索引。如果该字段都不会作为条件用于检索,只会出现在结果中,那该字段不适合作为索引。

主键索引

在创建的时候直接指定

create table user(
    id int primary key,    
    name varchar(30)
);
//或者
create table user(
    id int,
    name varchar(30),
    primary key(id)       
);

在已有的表添加索引

ALTER TABLE `table_name` ADD PRIMARY KEY index_name  ( `column`  [ASC|DESC]);

//例如:
create table user(
    id int,
    name varchar(30)
);
alter table user3 add primary key(id);    -- 创建表以后再添加主键
  • ALTER TABLE: 用于修改表结构的关键字。
  • table_name: 指定要修改的表的名称。
  • ADD PRIMARY KEY: 添加索引的子句。ADD PRIMARY KEY用于创建普通索引。
  • index_name: 指定要创建的索引的名称。索引名称在表中必须是唯一的。
  • column1: 指定要索引的表列名。唯一的,列的数据类型通常是数值、文本或日期。
  • ASC和DESC(可选): 用于指定索引的排序顺序。默认情况下,索引以升序(ASC)排序。

删除索引

如果一个主键是自增长的,不能直接删除该列的主键索引,应当先取消自增长,再删除主键特性

alter table 表名 drop primary key; 
//例如:
alter table user modify id int ;【重新定义列类型】

alter table user drop primary key;

普通索引

在已有的表添加索引

ALTER TABLE table_name
ADD INDEX index_name (column1 [ASC|DESC], column2 [ASC|DESC], ...);
  • ALTER TABLE: 用于修改表结构的关键字。
  • table_name: 指定要修改的表的名称。
  • ADD INDEX: 添加索引的子句。ADD INDEX用于创建普通索引。
  • index_name: 指定要创建的索引的名称。索引名称在表中必须是唯一的。
  • (column1, column2, …): 指定要索引的表列名。你可以指定一个或多个列作为索引的组合。这些列的数据类型通常是数值、文本或日期。
  • ASC和DESC(可选): 用于指定索引的排序顺序。默认情况下,索引以升序(ASC)排序。

在创建表的时候添加索引

CREATE TABLE table_name (
  column1 data_type,
  column2 data_type,
  ...,
  INDEX index_name (column1 [ASC|DESC], column2 [ASC|DESC], ...)
);
  • CREATE TABLE: 用于创建新表的关键字。
  • table_name: 指定要创建的表的名称。
  • (column1, column2, …): 定义表的列名和数据类型。你可以指定一个或多个列作为索引的组合。这些列的数据类型通常是数值、文本或日期。
  • INDEX: 用于创建普通索引的关键字。
  • index_name: 指定要创建的索引的名称。索引名称在表中必须是唯一的。
  • (column1, column2, …): 指定要索引的表列名。你可以指定一个或多个列作为索引的组合。这些列的数据类型通常是数值、文本或日期。
  • ASC和DESC(可选): 用于指定索引的排序顺序。默认情况下,索引以升序(ASC)排序。

删除索引

DROP INDEX
DROP INDEX index_name ON table_name;
  • DROP INDEX: 用于删除索引的关键字。
  • index_name: 指定要删除的索引的名称。
  • ON table_name: 指定要在哪个表上删除索引。
ALTER TABLE
ALTER TABLE table_name
DROP INDEX index_name;
  • ALTER TABLE: 用于修改表结构的关键字。
  • table_name: 指定要修改的表的名称。
  • DROP INDEX: 用于删除索引的子句。
  • index_name: 指定要删除的索引的名称。

唯一索引

创建索引CREATE UNIQUE INDEX

CREATE UNIQUE INDEX index_name
ON table_name (column1 [ASC|DESC], column2 [ASC|DESC], ...);
  • CREATE UNIQUE INDEX: 用于创建唯一索引的关键字组合。
  • index_name: 指定要创建的唯一索引的名称。索引名称在表中必须是唯一的。
  • table_name: 指定要在哪个表上创建唯一索引。
  • (column1, column2, …): 指定要索引的表列名。你可以指定一个或多个列作为索引的组合。这些列的数据类型通常是数值、文本或日期。
  • ASC和DESC(可选): 用于指定索引的排序顺序。默认情况下,索引以升序(ASC)排序。

在已有的表上创建索引 ALTER TABLE

ALTER table mytable 
ADD CONSTRAINT unique_constraint_name UNIQUE (column1, column2, ...);
  • ALTER TABLE: 用于修改表结构的关键字。
  • table_name: 指定要修改的表的名称。
  • ADD CONSTRAINT: 这是用于添加约束(包括唯一索引)的关键字。
  • unique_constraint_name : 指定要创建的唯一索引的名称,约束名称在表中必须是唯一的。
  • UNIQUE (column1, column2, …): 指定要索引的表列名。你可以指定一个或多个列作为索引的组合。这些列的数据类型通常是数值、文本或日期。

创建表的时候直接指定

CREATE TABLE table_name (
  column1 data_type,
  column2 data_type,
  ...,
  CONSTRAINT index_name UNIQUE (column1 [ASC|DESC], column2 [ASC|DESC], ...)
);
  • CREATE TABLE: 用于创建新表的关键字。
  • table_name: 指定要创建的表的名称。
  • (column1, column2, …): 定义表的列名和数据类型。你可以指定一个或多个列作为索引的组合。这些列的数据类型通常是数值、文本或日期。
  • CONSTRAINT: 用于添加约束的关键字。
  • index_name: 指定要创建的唯一索引的名称。约束名称在表中必须是唯一的。
  • UNIQUE (column1, column2, …): 指定要索引的表列名。

显示索引信息

SHOW INDEX FROM table_name\G

注意

  1. 不是加了索引就会使用到,如果mysql发现通过索引查找的效率和整表查找差不多,mysql会自动优化为整表索引,因为使用索引要先读索引文件还需要扫码索引树。
  2. 如果索引字段涉及到类型强转或者mysql函数调用以及表达式计算等,就不能使用到索引了。
  3. 对于字符串类型来说,通常取前几个字符来区分字符串就足够了,否则过长的字符串索引会导致索引文件也过长,磁盘I/O也使用过多。
  • 28
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值