mysql索引类型和索引方式

article/2025/9/20 22:13:37

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里存放的不是主键的信息,而是指向数据文件里的对应数据行的信息.


http://chatgpt.dhexx.cn/article/ctOTn5Gw.shtml

相关文章

Mysql索引的类型(单列索引、组合索引 btree索引 聚簇索引等)

一、索引的类型 Mysql目前主要有以下几种索引类型:FULLTEXT,HASH,BTREE,RTREE。 FULLTEXT 即为全文索引,目前只有MyISAM引擎支持。其可以在CREATE TABLE ,ALTER TABLE ,CREATE INDEX 使用&…

mysql索引类型有哪些?

在Mysql数据库当中,我们经常会谈到Sql语句,当然也会谈到索引优化,那么在数据库当中有哪些索引类型呢,博主在这里进行分享,希望对大家能有所帮助。 目录 1、B-Tree索引: 2、Hash索引: 3、Full…

什么是索引?Mysql目前主要的几种索引类型

一、索引 MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。 打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车。 索引分单列索引和组合索引。…

Mysql索引类型与索引方法

写在前面: 乍一看这两个概念可能有点混,先上一张发图。 索引类型就是我们平常说的唯一索引,主键索引,组合索引等索引类型。 我们都知道索引是一种数据结构,到底我们建的索引应该以什么样的结构存储呢?存储…

MYSQL 索引类型

一、索引类型 在数据库表中,对字段建立索引可以大大提高查询速度。假如我们创建了一个 mytable表 代码如下: CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL ); 我们随机向里面插入了10000条记录,其中有一条:555…

常见索引类型

日常开发工作中,涉及到的数据存储,要做查询优化或想深入了解存储引擎,需要对索引知识有个起码的了解,下面介绍下最常见的四种索引结构。 位图索引哈希索引BTREE索引倒排索引 1、位图索引(BitMap) 位图索引…

数据库的五种索引类型

本文从如何建立mysql索引以及介绍mysql的索引类型,再讲mysql索引的利与弊,以及建立索引时需要注意的地方 首先:先假设有一张表,表的数据有10W条数据,其中有一条数据是nicknamecss,如果要拿这条数据的话需要些的sql是 SELECT * FROM award WHERE nickname css 一般情况下,在没…

mysql索引有哪些类型?

MySQL目前主要有的索引类型为:普通索引、唯一索引、主键索引、组合索引、全文索引。 通过给字段添加索引可以提高数据的读取速度,提高项目的并发能力和抗压能力。索引优化时mysql中的一种优化方式。索引的作用相当于图书的目录,可以根据目录…

你知道多少种索引?

前言 嗨,大家好,我是fancy呀。 在工作中我们常常用到索引,无论是普通索引还是唯一索引,都是一些常用的索引方式,目的就是为了提高查询效率,避免业务请求超时等问题。那么,当你在使用索引的时候…

动态规划算法 | 最长递增子序列

通过查阅相关资料发现动态规划问题一般就是求解最值问题。这种方法在解决一些问题时应用比较多,比如求最长递增子序列等。 有部分人认为动态规划的核心就是:穷举。因为要求最值,肯定要把所有可行的答案穷举出来,然后在其中找最值…

求最长递增子序列个数——C++

声明:本文原题主要来自力扣,记录此博客主要是为自己学习总结,不做任何商业等活动! 一、下面是原题描述 给定一个未排序的整数数组,找到最长递增子序列的个数。 示例 1: 输入: [1,3,5,4,7] 输出: 2 解释: 有两个最长递…

最长递增子序列(LIS)

最长递增子序列(LIS) 问题描述: 求一个序列的最长递增子序列,这样的子序列是允许中间越过一些字符的,即留“空”。 例如:4 2 3 1 5 的最长递增子序列为 2 3 5,长度为 3 。 解法:…

【Leetcode】最长递增子序列问题及应用

文章目录 最长递增子序列问题及应用300. 最长递增子序列面试题 17.08. 马戏团人塔354. 俄罗斯套娃信封问题面试题 08.13. 堆箱子1691. 堆叠长方体的最大高度406. 根据身高重建队列 最长递增子序列问题及应用 300. 最长递增子序列 请参考 【Leetcode】计算最长系列&#xff08…

输出最长递增子序列

目录 题目: 输入描述: 输出描述: 示例1 输入 输出 示例2 输入 输出 说明 备注: 思路分析: 改进: 得到最长子序列: 易错点: 代码展示: 题目: 给定数组arr,设长度为n&…

NC91 最长递增子序列

NC91 最长递增子序列 这道题n的范围是1e5,因此不能使用常规的dp[i],表示以i结尾的最大的子序列,因为这个时间复杂度是n方级别。因此要换一种算法。 贪心二分,时间复杂度为O(nlogn) 下面说说贪心二分的解法,举例说明基…

Vue3 最长递增子序列详解

Vue3 最长递增子序列研究 本文初衷 彻底讲清楚 Vue3 源码中实现最长递增子序列的算法。 概念名词 **最长递增子序列:**在一个给定的数值序列中,找到一个子序列,使得这个子序列元素的数值依次递增,并且这个子序列的长度尽可能地…

Java 最长递增子序列_最长递增子序列问题 Java

最长递增子序列问题 LIS(longest increasing subsequence) 例如 给定一个数列,长度为N, 求这个数列的最长上升(递增)子数列(LIS)的长度. 以 1, 7, 2, 8, 3, 4 为例。 这个数列的最长递增子数列是 1 2 3 4,长度为4; 次长的长度为3&…

最长递增子序列

问题 给定一个长度为N的数组,找出一个最长的单调自增子序列(不一定连续,但是顺序不能乱)。例如:给定一个长度为6的数组A{5, 6, 7, 1, 2, 8},则其最长的单调递增子序列为{5,6,7,8},长度为4. 解法1:最长公共子序列法 这个问题可以转换为最长公共子序列问题。如…

动态规划设计方法详解最长递增子序列

很多读者反应,就算看了前文动态规划详解,了解了动态规划的套路,也不会写状态转移方程,没有思路,怎么办?本文就借助「最长递增子序列」来讲一种设计动态规划的通用技巧:数学归纳思想。 最长递增…

最长递增子序列(Longest Increasing Subsequence)

定义 最长上升子序列(Longest Increasing Subsequence,LIS),在计算机科学上是指一个序列中最长的单调递增的子序列。 问题描述 给定一个长度为 N 的数组,找出一个最长的单调自增子序列(不一定连续&#…