Mysql 索引(三)—— 不同索引的创建方式(主键索引、普通索引、唯一键索引)

这篇具有很好参考价值的文章主要介绍了Mysql 索引(三)—— 不同索引的创建方式(主键索引、普通索引、唯一键索引)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

了解了主键索引的底层原理,主键索引其实就是根据主键字段建立相关的数据结构(B+树),此后在使用主键字段作为条件查询时,会直接根据主键查找B+树的叶子结点。除了主键索引外,普通索引和唯一键索引也是如此,只不过普通索引要稍微绕一点,下面会具体介绍。


目录

一、索引分类

1、主键索引

2、普通索引

3、唯一索引

二、创建索引的原则

三、创建索引

1、主键索引(primary key)

2、普通索引(index)

3、唯一索引(unique)

四、查询索引

五、删除索引


一、索引分类

1、主键索引

略。主键索引的概念这里就不再赘述了,本质就是根据主键在B+树上查找叶子结点。

具体介绍参考:Mysql 索引(一)—— 主键索引的底层原理_仲夏夜之梦~的博客-CSDN博客

2、普通索引

使用普通索引的场景:某个字段存在重复数据

主键索引是根据主键字段建立相关数据结构(B+树),而普通索引则是根据某个非主键字段建立对应的数据结构,此后检索时直接根据该非主键字段查找 B+ 树的叶子结点。普通索引属于非聚簇索引,不同存储引擎对应的普通索引的结构会有所不同。

(1) MyISAM

MyISAM 普通索引的创建方式和主键索引是一样的,叶子结点不保存任何数据,只保存数据记录的地址。

主键索引,Mysql / Sqlite 数据库,mysql,数据库,java

(2) InnoDB

InnoDB 普通索引和主键索引不一样,InnoDB 主键索引中叶子结点保存的是数据记录;而 InnoDB 普通索引中叶子结点保存的是主键索引值,后续要使用该主键索引值到主键索引中获取完整记录,这种方式叫回表查询。

主键索引,Mysql / Sqlite 数据库,mysql,数据库,java

3、唯一索引

使用唯一索引的前提条件:某个字段的内容不存在重复数据

(唯一索引使用的数据结构跟主键索引、普通索引是一样的,不同之处在于作为检索条件的字段不存在重复数据

二、创建索引的原则

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

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

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

三、创建索引

1、主键索引(primary key)

主键索引的创建:索引字段必须是主键,主键索引的字段类型一般都是 int,创建主键索引的关键字是primary key

(1) 建表时创建

-- 方式一:
create table user1(
    id int primary key,     -- 在创建表的时候,直接在字段名后指定 primary key
    name varchar(30)
);

-- 方式二:
create table user1(
    id int,
    name varchar(30),
    primary key(id)        -- 在创建表的最后,指定某列或某几列为主键索引
);

(2) 建表后追加

create table user3(
    id int,
    name varchar(30)
);
alter table user3 add primary key(id);    -- 创建表以后再添加主键

2、普通索引(index)

普通索引的创建:索引字段的数据允许重复。使用的关键字为 index

(1) 建表时创建

create table user(
    id int primary key,
    name varchar(20),
    email varchar(30),
    index(name)         --在表的定义最后,指定某列为索引
);

(2) 建表后追加

create table user(
    id int primary key,
    name varchar(20),
    email varchar(30)
);
alter table user add index(name);     --创建完表以后指定某列为普通索引

3、唯一索引(unique)

唯一索引的创建:要求检索字段不能存在重复数据。使用的关键字为 unique。唯一索引的创建方式和普通索引完全一样,只需要把 index 关键字替换成 unique 关键字即可。

四、查询索引

查询某个表中的所有索引以及对应的字段

show index from 表名 [\G];

主键索引,Mysql / Sqlite 数据库,mysql,数据库,java

五、删除索引

(1) 删除主键索引

 alter table 表名 drop primary key;

主键索引,Mysql / Sqlite 数据库,mysql,数据库,java

注意:如果该主键已经被设为了自增(auto_increment),则该主键索引无法被删除。

(2) 删除其他索引(普通索引、唯一索引)

drop index 索引字段名 on 表名;

主键索引,Mysql / Sqlite 数据库,mysql,数据库,java文章来源地址https://www.toymoban.com/news/detail-768068.html

到了这里,关于Mysql 索引(三)—— 不同索引的创建方式(主键索引、普通索引、唯一键索引)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【⑪MySQL | 约束(一)】概念 | 非空 | 唯一 | 主键 | 自增长约束

    ✨欢迎来到小K的MySQL专栏,本节将为大家带来MySQL约束的概念 | 非空约束 | 唯一约束 | 主键约束 | 自增长约束的分享 ✨ 1. 约束(Constraint)概念 1.1 为什么需要约束 对于已经创建好的表,虽然字段的数据类型决定了所能存储的数据类型,但是表中所存储的数据是否合法并没有进行

    2024年02月16日
    浏览(42)
  • 【MySQL】MySQL表的约束-空属性/默认值/列属性/zerofill/主键/自增长/唯一键/外键

    表的约束:表中一定要有各种约束,通过约束,让我们未来插入数据库表中的数据是符合预期的。约束的本质是通过计数手段,倒逼程序员,插入正确的数据,反过来,站在mysql的视角,凡是插入进来的数据,都是符合约束的 约束的最终模板:保证数据的完整性和可预期性

    2024年02月01日
    浏览(49)
  • MySQL几种创建索引的方式

    一、创建表时创建索引 二、表创建好后创建索引 1、通过Alter创建索引 ①PRIMARY  KEY(主键索引)         mysql ALTER  TABLE  `table_name`  ADD  PRIMARY  KEY (  `column`  )  ②UNIQUE(唯一索引)         mysql ALTER  TABLE  `table_name`  ADD  UNIQUE (`column` )  ③INDEX(普通索引)         mysql ALT

    2024年02月15日
    浏览(44)
  • Python3操作SQLite3创建表主键自增长|CRUD基本操作

    Win11查看安装的Python路径及安装的库 Python PEP8 代码规范常见问题及解决方案 Python3操作MySQL8.XX创建表|CRUD基本操作 Python3操作SQLite3创建表主键自增长|CRUD基本操作 anaconda3最新版安装|使用详情|Error: Please select a valid Python interpreter Python函数绘图与高等代数互融实例(一):正弦函数与

    2024年02月07日
    浏览(41)
  • openGauss中创建唯一索引和创建唯一约束的区别

    今天一个一起搬砖的兄弟同事过来问,为什么他的索引删不掉?我过去看了下: 执行脚本: 报错如下: 执行时出错 确认要继续执行吗? 单击“详细信息”了解详情。 SQL错误码: = 2BP01 ERROR: cannot drop index constraint_unique because constraint constraint_unique on table t1 requires it Hint: You ca

    2023年04月09日
    浏览(52)
  • MySQL强制使用索引的两种方式及优化索引,使用MySQL存储过程创建测试数据。

    一、MySQL强制使用索引的两种方式 1、使用 FORCE INDEX 语句: 使用 FORCE INDEX(索引名称)走索引: 2、使用 USE INDEX 语句: 使用 USE INDEX(索引名称)走索引: FORCE INDEX 或 USE INDEX 的区别? FORCE INDEX :这个语句指示MySQL强制查询使用特定的索引。它会忽略优化器的选择,无论索引

    2024年02月03日
    浏览(49)
  • Mysql为json字段创建索引的两种方式

    JSON 数据类型是在 mysql5.7 版本后新增的,同 TEXT,BLOB 字段一样,JSON 字段不允许直接创建索引。即使支持,实际意义也不大,因为我们一般是基于文档中的元素进行查询,很少会基于整个 JSON 文档。基于此问题,在 MySQL 8.0.17 及以后的版本中,InnoDB存储引擎支持JSON数组上的

    2024年02月12日
    浏览(46)
  • mysql中主键索引和联合索引的原理解析

    主键索引 :按照主键数据从小到大按照从左到右进行排序,叶节点只存储数据区; 接着将上面的页生成出来,页只存储索引和指针,指针指向数据域,当通过主键查找数据时,从B+树的头部开始寻址数据、读取数据。 上面为索引页 下面为数据页 查询select * from table where a=6,

    2024年04月08日
    浏览(39)
  • 浅谈mysql的主键和索引

    在上一篇文章《count(1)、count(*)、count(字段)哪个更靠谱》中,我们提到过主键是优化不了count的查询效率的,需要建索引才可以,那么,是不是意味着主键的效率还不如一般的索引呢?怀着这个疑问,我们一起来了解下mysql主键和索引的相关知识。 mysql数据库的MYISAM和InnoDB引擎

    2024年02月08日
    浏览(44)
  • 【Mysql】复合主键的索引

    复合主键在where中使用查询的时候到底走不走索引呢?例如下表: 当执行以下SQL的时候到底走不走索引呢?             Explain结果: 使用索引   使用索引   使用索引   不使用索引   不使用索引   使用索引   结论:Mysql复合主键的顺序十分重要,WHERE查询条件中会按列匹配

    2023年04月25日
    浏览(81)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包