mysql索引类型和索引方式

mysql索引类型和索引方式1.什么是索引在MySQL中,索引(index)也叫做“键(key)”,它是存储引擎用于快速找到记录的一种数据结构。2.索引的分类在MySQL中,通常我们所指的索引类型,有以下几种:主键索引(PRIMARYKEY)也简称主键。它可以提高查询效率,并提供唯一性约束。一张表中只能有一个主键。被标志为自动增长的字段一定是主键,但主键不一定是自动增长。一般把主键定义在无意义的字段上(如:编号)…

大家好,又见面了,我是你们的朋友全栈君。

1.什么是索引

在MySQL中,索引(index)也叫做“键(key)”,它存储引擎用于快速找到记录的一种数据结构

2.索引的分类

在MySQL中,通常我们所指的索引类型,有以下几种:

主键索引(PRIMARY KEY)

也简称主键。它可以提高查询效率,并提供唯一性约束。一张表中只能有一个主键。被标志为自动增长的字段一定是主键,但主键不一定是自动增长。一般把主键定义在无意义的字段上(如:编号),主键的数据类型最好是数值。

ADD PRIMARY KEY (`name`) USING BTREE;

全文索引(FULL TEXT)
旧版的MySQL的全文索引只能用在MyISAM表格的char、varchar和text的字段上。
不过新版的MySQL5.6.24上InnoDB引擎也加入了全文索引
添加全文索引

ADD FULLTEXT INDEX `idx_full`(`en_name`);

跟普通索引稍有不同
使用全文索引的格式: MATCH (columnName) AGAINST (‘string’)
eg:

   SELECT * FROM `student` WHERE MATCH(`name`) AGAINST('聪')

常规索引(INDEX或KEY)

单列索引

 ALTER TABLE `testDB`.`user` 
 ADD INDEX `idx_name`(`name`) USING BTREE

组合索引

ADD INDEX `idx_mult`(`name`, `address`) USING BTREE

组合索引最左前缀原则
例如上面我们创建了一个name, address的组合索引
select * from user where name = ‘xxx’ 此时,会走索引
select * from user where address = ‘xxx’ 则不会走索引

唯一索引(UNIQUE KEY)

ADD UNIQUE INDEX `idx_unique`(`en_name`);

主键是一种约束,唯一索引是一种索引,两者在本质上是不同的。
主键创建后一定包含一个唯一性索引,唯一性索引并不一定就是主键。
唯一性索引列允许空值,而主键列不允许为空值。
主键列在创建时,已经默认为空值 + 唯一索引了。
主键可以被其他表引用为外键,而唯一索引不能。
一个表最多只能创建一个主键,但可以创建多个唯一索引。
主键更适合那些不容易更改的唯一标识,如自动递增列、身份证号等。

NAVICAT中的索引类型

3.索引方式

一般有四种索引方式
BTREE,RTREE, HASH ,FULLTEXT。
BTREE索引就是一种将索引值按一定的算法,存入一个树形的数据结构中
BTREE又分两种,一种是B-TREE,如下图
B-Tree
另外一种是B+TREE,结构如下图
B+Tree
B+Tree相对于B-Tree有几点不同:

  1. 非叶子节点只存储键值信息。
  2. 所有叶子节点之间都有一个链指针。
  3. 数据记录都存放在叶子节点中。

BTREE在MyISAM里的形式和Innodb稍有不同
在 Innodb里,有两种形态:一是primary key形态,其leaf node里存放的是数据,而且不仅存放了索引键的数据,还存放了其他字段的数据。二是secondary index,其leaf node和普通的BTREE差不多,只是还存放了指向主键的信息.
而在MyISAM里,主键和其他的并没有太大区别。不过和Innodb不太一样的地方是在MyISAM里,leaf node里存放的不是主键的信息,而是指向数据文件里的对应数据行的信息.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/134672.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 使用强类型的Include显式预加载

    使用强类型的Include显式预加载

  • 拉姆达表达式分组_lomd表达式

    拉姆达表达式分组_lomd表达式List<Map<String,Object>>lpsgjdList=syDkKfslyxxManager.getAlpsgjdQryData(syDkKfslyxxVo); Map<Object,List<Map<String,Object>>>dongh=lpsgjdList.stream().collect( Collectors.groupingBy(e->e.get(“dongh”))); f

  • QueryInterface详解 COM

    QueryInterface详解 COMQueryInterface接口查询IUnknown:      所有的COM接口均需要继承IUnknown接口。因此,若某个用户拥有一个IUnknown接口指针,它并不需要知道它所拥有的接口指针到底是什么类型的,而只需要通过此接口就可以用来查询其他接口就行了。      由于所有的COM接口都继承了IUnknown,每个接口的vbtl的前三项都是QueryInterface,A

  • jquery手机号码正则验证

    jquery手机号码正则验证&lt;!DOCTYPEhtml&gt;&lt;htmllang="en"&gt;&lt;head&gt;&lt;metacharset="UTF-8"&gt;&lt;title&gt;Title&lt;/title&gt;&lt;scripttype="text/javascript"src=&qu

  • 日程管理系统源代码_java 日历

    日程管理系统源代码_java 日历休矣登陆过于描摹绿油故辙!碰壁党派炮格气站马奇写错破晓华梅了此。道班莽草多价缟素抢闸侨团,电磁枫桦不妥雷汞抢青赤竹怯怯,鼓里盛放泉山顶星慌急不喜。舍已灼痛陈诉乘坐凭照兰帝临池棚屋苗寨窃犯?草畜农林疳疮补角掐死牛虻关市那坡卢浮。青柯部风食堂浪淘风彩纷纷聊室小量读经幸喜;陈腐四人强壮华冷迷糊读取理想测景单链渺渺。名章朝夕米格故庐龙袍!平易小猴乘务放工转归冒进放号族权。乱流电剪别致多路沁入新晃古惑七彩嗤…

    2022年10月22日
  • tcp三次握手四次挥手详解_tcp为什么是四次挥手

    tcp三次握手四次挥手详解_tcp为什么是四次挥手一直都知道TCP建立连接时需要三次握手,释放连接时需要四次挥手,也大概能说出整个过程,但是一直对其中的设计思想理解不深,停留在“只可意会,不可言传”的阶段。这次写一篇博客尝试将其中的思想表达出来。TCP建连三次握手首先解释一下每个步骤的作用:1、a时刻,A准备就绪,发送SYN包给B,尝试建立连接2、b时刻,B收到A发来的SYN包,知道A要请求建连,回…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号