mysql 索引使用与优化

本文详细介绍了MySQL的索引原理,包括B+ Tree结构及其在InnoDB引擎中的应用。讨论了索引的分类,如普通索引、唯一索引、全文索引等,并提供了创建和删除索引的语法示例。此外,文章提出了多种索引设计原则,如唯一性、频繁查询条件和更新频率等,并总结了可能导致索引失效的情况,如计算、函数和范围查询等。最后,强调了使用覆盖索引的重要性,以提高查询性能。
摘要由CSDN通过智能技术生成

前言

索引对有一定开发经验的同学来说并不陌生,合理使用索引,能大大提升sql查询的性能,可以这么讲,随着业务数据量的不断增长,优化系统的响应速度,很大程度上可以说就是集中在索引的优化上;

mysql索引原理

在正式了解与学习mysql索引之前,先对mysql的索引原理再次回顾下;

我们知道,目前大多数使用的mysql引擎为 innodb,而innodb引擎使用的是 B+ Tree,下面通过几张图快速了解下 B+ Tree的结构,

假如存在下面这张表:

在这里插入图片描述

那么通过 B+ Tree构建出来的 “ 以ID为主键索引 ” 的树形结构如下:

在这里插入图片描述

说明:

  • 叶子节点存放的是ID对应的一条完整的记录;
  • 查找一条记录时,如果是按照ID搜索,则会采用类似二叉树的方式,最终定位到叶子节点的ID对应的那条记录;

也就是说,如果查询的时候,以ID为参数,则效率是最高的,反之,如果以非主键字段,建立索引,则B+Tree的索引结构将会如下,

在这里插入图片描述

说明:

  • 主键索引构建出来的 B+Tree 结构保持不变;
  • 再以主键ID之外的字段,构建出一个B+Tree结构,其叶子节点存储的是字段的值以及对应的主键值;

以上关于mysql 的inndb的索引结构原理先介绍到这儿,后文中将会用到里面的东西,还请留意;

mysql索引分类

MySQL的索引包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等;

  • 从 功能逻辑 上说,索引主要有 4 种,分别是普通索引、唯一索引、主键索引、全文索引;
  • 按照 物理实现方式 ,可以分为 2 种:聚簇索引和非聚簇索引;
  • 按照 作用字段个数 进行划分,分成单列索引和联合索引;、

常规分类

  • 主键索引,针对表的主键创建的索引,默认建表的时候,自动创建,有且只能有一个;
  • 唯一索引,为了避免一个表中的某列数据出现重复的值,可以有多个,关键字:UNIQUE;
  • 常规索引,用于快速定位特定字段的数据,可以有多个;
  • 全文索引,全文索引常用于查找文本中的关键词,而不是比较索引中的值,可以有多个,关键字FULLTEXT;

补充说明

不同的存储引擎支持的索引类型也不一样

  • InnoDB :支持 B-tree、Full-text 等索引,不支持 Hash索引;
  • MyISAM : 支持 B-tree、Full-text 等索引,不支持 Hash 索引;
  • Memory :支持 B-tree、Hash 等索引,不支持 Full-text 索引;
  • NDB :支持 Hash 索引,不支持 B-tree、Full-text 等索引;
  • Archive :不支持 B-tree、Hash、Full-text 等索引;

索引创建语法

数据准备,有如下建表sql

CREATE TABLE `user` (
	`user_id` VARCHAR (32) NOT NULL COMMENT '用户ID',
	`user_name` VARCHAR (64) DEFAULT NULL COMMENT '用户姓名',
	`passwd` VARCHAR (64) NOT NULL COMMENT '密码',
	`email` VARCHAR (64) DEFAULT NULL COMMENT '邮箱',
	`mobile` VARCHAR (32) DEFAULT NULL COMMENT '手机号',
	`address` VARCHAR (128) DEFAULT NULL COMMENT '地址'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值