Mysql索引分类及其使用实例详解

MySQL索引分类及其使用实例详解

一、MySQL索引分类

MySQL索引主要分为B-tree索引和哈希索引两种,其中B-tree索引又包括主键索引、唯一索引、普通索引、全文索引、空间索引等。

1. B-tree索引

B-tree索引是MySQL中最常用的索引类型,其优点是检索速度快,缺点是对于索引列有前缀的字段,需要存储较多的内容。

B-tree索引又包括以下几种:

  1. 主键索引:用于唯一标识每一行数据,具有唯一性和非空性,每个表只能有一个主键索引,且不能为NULL。
  2. 唯一索引:是指列中的值必须唯一,可以为空。
  3. 普通索引:对于普通查询的列可以建立。
  4. 全文索引:用于全文检索,只能在MyISAM存储引擎下使用。
  5. 空间索引:用于空间数据类型的检索。

2. 哈希索引

哈希索引通过将索引值作为哈希函数的输入,然后将计算得到的哈希值与哈希表进行匹配,如果存在则返回地址,否则返回空。哈希索引适用于等值查询场景,如WHERE column = value

二、MySQL索引使用实例

1. 普通索引示例

假设我们有一个用户表,包含以下字段:id、name、age、gender和email:

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `gender` enum('male','female') DEFAULT NULL,
  `email` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

我们为name字段建立普通索引:

ALTER TABLE `user` ADD INDEX `idx_name` (`name`);

之后可以使用以下SQL语句对name进行模糊查询,其效率将大大提升:

SELECT * FROM `user` WHERE `name` LIKE 'Tom%';

2. 唯一索引示例

假设我们有一个学生表,包含以下字段:id、name、age和email:

CREATE TABLE `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `email` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `idx_email` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

我们为email字段建立唯一索引:

ALTER TABLE `student` ADD UNIQUE INDEX `idx_email` (`email`);

之后插入以下重复记录将会失败:

INSERT INTO `student` (`name`, `age`, `email`) VALUES ('Tom', 18, 'test@test.com');
INSERT INTO `student` (`name`, `age`, `email`) VALUES ('Jerry', 19, 'test@test.com');

三、总结

MySQL索引分类及其实例已经讲解完毕,需要注意的是,在选择索引类型时需根据场景和需求进行选择,以达到最优的效果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Mysql索引分类及其使用实例详解 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • CentOS 8 安装 MariaDB的详细教程

    CentOS 8 安装 MariaDB 的详细教程 MariaDB 是 MySQL 的一个分支,是一个免费、开源的关系型数据库管理系统,适用于各种规模的应用程序和网站。本文将介绍 CentOS 8 如何安装 MariaDB 数据库。 准备工作 在开始安装 MariaDB 之前,请确保你已经安装了最新的 CentOS 8 系统,并拥有使用系统管理员 (root…

    database 2023年5月22日
    00
  • 如何优化SQL语句(全)

    以下是如何优化 SQL 语句的完整攻略: 1. 确定优化目标和范围 在进行 SQL 优化之前,必须先确定优化的目标和优化的范围。目标是什么?但凡是涉及查询性能的问题,往往都是执行效率低下。如果你能通过优化 SQL 减少了查询所需时间,或者缩短了执行查询所需时间的界面响应时间,那么目标就可以算是达成了。而范围则是只考虑 SQL 查询的优化,也就是针对 SELE…

    database 2023年5月19日
    00
  • SpringCloud+Eureka+Feign+Ribbon的简化搭建流程,加入熔断,网关和Redis缓存[2]

    作者:故事我忘了¢个人微信公众号:程序猿的月光宝盒 [toc]## 前提:本篇是基于 SpringCloud+Eureka+Feign+Ribbon的简化搭建流程和CRUD练习[1] 的修改与拓展 1.修改consumer的CenterFeign.java,把返回值全部设置为String /** * 是consumer调用provider(需要指定provi…

    Redis 2023年4月11日
    00
  • redis 七种内部数据结构

    最近因为有空,开始补之前一直没能仔细看的 redis 内部数据结构 这一部分,参考了 张铁蕾 的系列文章,并有一些自己的总结提炼。 每一篇我都用 xmind 做笔记,最后导出图片,因此下面每一篇笔记都是一张图片的形式。 为什么选择 xmind 做思维导图笔记?做开发有几年了,学的东西越来越多,要记的东西也越来越多,再按以前的方法做笔记的话,没有规律的笔记比较…

    Redis 2023年4月13日
    00
  • PHP5.3以上版本安装ZendOptimizer扩展

    安装ZendOptimizer扩展是加速PHP代码运行的一种方法,这里是PHP5.3以上版本安装ZendOptimizer扩展的完整攻略。 安装ZendOptimizer扩展 步骤一:下载ZendOptimizer扩展 首先需要到Zend官网下载对应的ZendOptimizer扩展(下载链接)。请注意选择合适的版本和系统环境。 步骤二:解压ZendOptim…

    database 2023年5月22日
    00
  • Yapi安装部署详细图文教程

    下面是一份“Yapi安装部署详细图文教程”的完整攻略,希望能给你带来帮助。 Yapi是什么? Yapi是一个开源的、可定制的、高效的、灵活的接口管理平台。 准备工作 在开始安装Yapi之前,你需要满足以下几个前提条件: 安装了node.js 安装了MongoDB 一份Yapi的安装包 安装步骤 第一步:下载并解压Yapi安装包 首先,你需要从Github上下…

    database 2023年5月22日
    00
  • MySql更新优化策略

    MySql更新优化策略 在进行数据库更新操作时,我们需要关注数据库性能优化,优化可以提高更新操作的效率,减少不必要的资源消耗。以下是一些MySql数据库更新优化策略。 1.使用WHERE子句 使用WHERE子句可以只更新满足条件的记录,避免不必要的更新操作,减少对系统资源的消耗。例如,我们可以使用如下语句来更新表中ID=1的一条记录,而不更新其他记录: UP…

    database 2023年5月21日
    00
  • mysql函数全面总结

    MySQL函数全面总结 MySQL函数是MySQL数据库中一个非常重要的部分,它们能够简化查询语句的开发以及提高查询效率。本文将对MySQL函数进行全面总结,重点讲解MySQL数据库中常用的函数及其使用方法。 1. 数值函数 ABS ABS函数返回指定数字的绝对值。 示例: SELECT ABS(-10.5); — 返回10.5 ROUND ROUND函数…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部