MySQL--索引类型详解

索引的类型

主键索引:

PRIMARY KEY,当一张表的某个列是主键的时候,该列就是主键索引,一张表只允许有一个主键索引,主键所在的列不能为空。

创建主键索引的SQL语法:

# 给user表中的id字段创建名为id_index的主键索引,使用ALTER创建主键索引
ALTER TABLE `user` ADD PRIMARY KEY id_index(`id`);

注意主键索引不能使用create index语句创建。

唯一索引:

unique ,一个或多个列组成组成唯一,就可以做唯一索引,一个表可以有多个唯一索引,唯一索引的列不能为空。

创建唯一索引的SQL语法:

# 给user表中的user_name字段创建名为index_name 的唯一索引
CREATE UNIQUE INDEX index_name on user(user_name)

普通索引:

最基本的索引类型,没有限制,可以为空,可以有多个。

# 给user表中的age字段创建名为index_age 的唯一索引
CREATE INDEX index_age on user(age)

联合索引:

也称复合索引,就是在多个列上建立的索引。

# 给user表中的address、hobby字段创建名为index_address_hobby 的联合索引
CREATE INDEX index_address_hobby on user(address,hobby)

覆盖索引:

个人理解覆盖索引就是一种特殊的联合索引,就是查询的列在索引中就可以获取到,无需读取数据行,使一种查询手法的优化。

# 给user表中的name、age、gender字段创建名为index_name_age_gender的索引
CREATE INDEX index_name_age_gender on user(name,age,gender)

全文索引:

全文索引的类型是FullText,全文索引只支持varchar、char、text类型的列上创建,MyISAM支持全文索引,InnoDB在MySQL5.6之后支持了全文索引(项目中在MySQL上使用全文索引的场景不太多,后面会更新一篇全文索引使用详解)。

# 给user表中的name字段创建全文索引
ALTER TABLE useradd FULLTEXT(name);

索引结构分类(InnoDB存储引擎):

按索引的存储结构分类,索引可以分为主键索引和二级索引(辅助索引),普通索引、联合索引、覆盖索引都可以理解为二级索引的某一种。

主键索引和二级索引(InnoDB存储引擎):

主键索引的特点:

  • 唯一,主键索引要求列的值必须唯一。
  • 非空,主键索引要求列不能为空。
  • 是聚集索引,非叶子节点不存储数据,叶子节点数据有序。
  • 效率高,通过主键索引可以快速的定位到表中的唯一一行数据。

主键索引树的结构实例:

在这里插入图片描述

二级索引的特点:

  • 叶子节点存储的是二级索引所在行的主键索引。
  • 非叶子节点存储的是完整的索引关键字信息。
  • 遵循最左前缀原则。
  • 支持更为丰富的查询场景。

单列索引树的结构实例:

在这里插入图片描述
联合索引树的结构实例:

在这里插入图片描述

索引相关实用型SQL语法

ALTER TABLE和CREATE INDEX 语法的区别?

  • ALTER TABLE 可以创建主键索引,而CREATE INDEX 不可以创建主键索引。
  • CREATE INDEX 必须提供索引名,ALTER TABLE 如果没有指定索引名称,则会将自动创建。
  • CREATE INDEX 一个语句只能创建一个索引,ALTER TABLE 可以创建多个。
 ALTER TABLE user ADD INDEX(column1),ADD INDEX(column2);

查看索引和删除索引的SQL语法:

 #查看tablename的所有索引
 SHOW INDEX  FROM tablename;
 #删除tablename中的索引index_name 
 DROP INDEX index_name ON tablename;  ;

隐藏索引:

隐藏索引功能可以作为一个SQL调优的小技巧,通过隐藏索引用来测试索引的性能,验证索引的必要性,避免了频繁删除新建索引,SQL调优完成,如果不影响性能再真正地删除索引。

 #隐藏tablename 的索引index_name 
ALTER TABLE tablename ALTER  INDEX  index_name INVISIBLE; 
 #取消tablename 的索引index_name 的隐藏
ALTER TABLE tablename ALTER  INDEX  index_name VISIBLE;   

索引的优点:

  • 根据业务场景合理创建索引,可以大大提高各种查询速度,特别是在数量量大的情况下。
  • 唯一索引可以避免数据重复插入。

索引的缺点:

  • 索引需要占用存储空间。
  • 对数据进行增删改的时候,还需要同时维护索引,有一定的开销。
  • 索引设计不合理或者索引过多,可能会影响查询效率。

索引设计原则:

  • 经常作为查询条件的字段创建索引。
  • 经常需要分组、排序的字段创建索引。
  • 在辨识度高的字段建立索引,如果是0、1这种类型的字段建议不要创建索引了。
  • 尽量创建联合索引,少创建单列索引。
  • 控制索引的数量,不要过多的为一个表创建索引。
  • 及时删除用不到的索引。

如有不正确的地方请各位指出纠正。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/447531.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Datawhale学习笔记】从大模型到AgentScope

从大模型到AgentScope AgentScope是一款全新的Multi-Agent框架,专为应用开发者打造,旨在提供高易用、高可靠的编程体验! 高易用:AgentScope支持纯Python编程,提供多种语法工具实现灵活的应用流程编排,内置…

数字化车间MES管理系统如何降低如何降低企业生产成本

数字工厂管理系统在降低制造企业生产成本方面发挥了重要的作用。通过优化物流和信息流,实现生产过程的自动化、智能化和可视化,数字工厂管理系统将从三个方面来降低生产成本。 1、数字工厂管理系统可以通过减少库存量来降低企业的生产成本。数字工厂管理…

GEE:计算一个遥感影像的空像素占比

作者:CSDN @ _养乐多_ 本文将介绍,如何在 Google Earth Engine (GEE) 平台计算一个遥感影像的空像素占比,其中,包含获取研究区内所有像素的总数的代码,以及获取非空像素的总数的代码。 结果如下图所示, 文章目录 一、核心函数1.1 获取研究区内所有像素的总数1.2 获取非…

【面试精讲】Java线程6种状态和工作原理详解,Java创建线程的4种方式

Java线程6种状态和工作原理详解,Java创建线程的4种方式 目录 一、Java线程的六种状态 二、Java线程是如何工作的? 三、BLOCKED 和 WAITING 的区别 四、start() 和 run() 源码分析 五、Java创建线程的所有方式和代码详解 1. 继承Thread类 2. 实现…

管理类联考-复试-管理类知识-其他常见词汇

文章目录 其他常见词汇营销4P、营销4C营销STP理论破窗效应价格歧视/区别定价定价策略——撇脂定价策略定价策略——渗透定价策略 心理账户机会成本看不见的手市场失灵马太效应鲶鱼效应禀赋效应(马克杯实验)羊群效应帕累托原则长尾理论 其他常见词汇 营销…

安装Mysql时报错[Warning] TIMESTAMP with implicit DEFAULT

win10安装mysql5.7.26(免安装版本)过程中 在执行mysqld --initialize命令时 报错: [Warning]解决方法: [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see document…

LINE社群运营教学

LINE 社群就是一个大型的公开聊天室,通过LINE社群不需要将对方添加为好友就可以聊天。它主要是以「兴趣」作为区分,所以商家可以在社群中找到不少潜在客户。尤其是面向台湾、日本、泰国这些地区的商家,LINE在这些地区的普及度很高&#xff0c…

记录一个vue编辑的移动端页面

<template><div class"wrap"><el-form :model"queryParams" ref"queryForm" size"small" :inline"true" label-width"120px"><el-form-item label"班级" prop"classId"…

【MATLAB第98期】基于MATLAB的MonteCarlo蒙特卡罗结合kriging克里金代理模型的全局敏感性分析模型(有目标函数)

【MATLAB第98期】基于MATLAB的Monte Carlo蒙特卡罗结合kriging克里金代理模型的全局敏感性分析模型&#xff08;有目标函数&#xff09;【更新中】 PS:因内容涉及较多&#xff0c;所以一时半会更新不完 后期会将相关原理&#xff0c;以及多种功能详细介绍。 麻烦点赞收藏&#…

Buildroot 之一 详解源码及架构

在之前的博文中,我们学习了直接通过 Makefile 手动来进行构建 U-Boot 和 Linux Kernel 等,其实,目前存在多种嵌入式 Linux 环境的构建工具,其中,Buildroot 就是被广泛应用的一种。今天就来详细学习一个 Buildroot 这个自动化构建工具。 Buildroot Buildroot 是一个运行于…

HCIP---IS-IS协议

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 一.IS-IS协议概述 IS-IS是一种基于链路状态的内部网关协议&#xff08;IGP&#xff09;&#xff0c;它使用最短路径优先算法&#xff08;SPF或Dijkstra&#xff09;进行路由计算。这种协议在自治…

如果让你实现实时消息推送你会用什么技术?轮询、websocket还是sse

在日常的开发中&#xff0c;我们经常能碰见服务端需要主动推送给客户端数据的业务场景&#xff0c;比如_数据大屏的实时数据_&#xff0c;比如_消息中心的未读消息_&#xff0c;比如_聊天功能_等等。 本文主要介绍SSE的使用场景和如何使用SSE。 学习就完事了 服务端向客户端推…

使用 Logstash 丰富你的 Elasticsearch 文档

作者&#xff1a;来自 Elastic David Pilato 我们在上一篇文章中看到&#xff0c;我们可以使用摄取管道中的 Elasticsearch Enrich Processor 在 Elasticsearch 中进行数据丰富。 但有时&#xff0c;你需要执行更复杂的任务&#xff0c;或者你的数据源不是 Elasticsearch&#…

掌握这3种方法,mp3格式转换就是这么简单!

掌握MP3格式转换并不需要复杂的技术或专业知识。在数字化时代&#xff0c;我们有许多简单而有效的方法可以实现这一目标。无论是为了节省存储空间&#xff0c;提高音频文件的兼容性&#xff0c;还是其他需求&#xff0c;本文将介绍三种简单的方法&#xff0c;让您轻松掌握mp3格…

编程界的圣经:从Scheme到JavaScript构建你的计算思维

文章目录 适读人群目 录 《计算机程序的构造和解释》&#xff08;Structure and Interpretation of Computer Programs&#xff0c;简记为SICP&#xff09;是MIT的基础课教材&#xff0c;出版后引起计算机教育界的广泛关注&#xff0c;对推动全世界大学计算机科学技术教育的发…

掌握潮流,使用渐变色彩图标icon,打造独特风格!

渐变色图标icon非常抢眼&#xff0c;从日常使用频率最高的手机到街上随处可见的海报&#xff0c;通常色彩搭配出众&#xff0c;让人感觉很惊艳。对色彩搭配的不同理解会影响我们设计产品的最终性能。本文将带您了解在UI设计圈兴起的时尚色彩组合——什么是渐变色&#xff0c;如…

Docker进阶:深入理解 Dockerfile

Docker进阶&#xff1a;深入理解 Dockerfile 一、Dockerfile 概述二、为什么要学习Dockerfile三、Dockerfile 编写规则四、Dockerfile 中常用的指令1、FROM2、LABEL3、RUN4、CMD5、ENTRYPOINT6、COPY7、ADD8、WORKDIR9、 ENV10、EXPOSE11、VOLUME12、USER13、注释14、ONBUILD 命…

【Python】成功解决ZeroDivisionError: division by zero

【Python】成功解决ZeroDivisionError: division by zero &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f448; 希望得到您的订…

ROS2从入门到精通0-2:ROS2简介、对比ROS1与详细安装流程

目录 0 专栏介绍1 什么是机器人操作系统&#xff1f;2 ROS的发展历程3 ROS2与ROS1的区别4 ROS2安装4.1 基本安装4.2 测试ROS24.2.1 测试一&#xff1a;发布者与订阅者4.2.2 测试二&#xff1a;海龟仿真器 5 常见问题 0 专栏介绍 本专栏旨在通过对ROS2的系统学习&#xff0c;掌…

CMake 交叉编译

想知道“魔笛手”在这里能发挥什么作用吗&#xff1f;想象一下&#xff0c;把 CMake 当做法力高强的魔笛手&#xff0c;C 的项目则是故事中的那些被魔笛手拯救的孩子。 父母要抚养一个孩子并非易事&#xff0c;营养需要面面俱到&#xff0c;保证身体健康&#xff0c;关心事无巨…