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 user 名 add 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这种类型的字段建议不要创建索引了。
- 尽量创建联合索引,少创建单列索引。
- 控制索引的数量,不要过多的为一个表创建索引。
- 及时删除用不到的索引。
如有不正确的地方请各位指出纠正。
相关文章:
MySQL--索引类型详解
索引的类型 主键索引: PRIMARY KEY,当一张表的某个列是主键的时候,该列就是主键索引,一张表只允许有一个主键索引,主键所在的列不能为空。 创建主键索引的SQL语法: # 给user表中的id字段创建名为id_ind…...
R语言中ggplot2图例位置、颜色、背景、标题
目录 1、不显示图例 2、自定义图例位置 3、修改图例背景颜色、外框颜色、大小 4、修改图例大小 5、图例设置背景、线框为空 6、自定义设置多个图例的标题 7、设置多个图例的之间的间隔 8、取消不需要的图例显示 1、不显示图例 theme(legend.position "none"…...
波卡 Alpha 计划启动,呼唤先锋创新者重新定义 Web3 开发
原文:https://polkadot.network/blog/the-polkadot-alpha-program-a-new-era-for-decentralized-building-collaboration/ 编译:OneBlock 区块链领域不断发展,随之而来的是发展和创新机会的增加。而最新里程碑是令人振奋的 Polkadot Alpha …...
公网IP与私有IP及远程互联
1.公网有私有IP及NAT 公网IP是全球唯一的IP,通过公网IP,接入互联网的设备是可以访问你的设备。但是IPV4资源有限,一般ISP(Internet Service Provider)并不会为用户提供公网IP。所以家里的计算机在公司是没法直接使用windows远程桌面直接访问…...
openCV xmake debug失效 release可以使用
在使用xmake构建一个项目时,添加openCV库,调用 imread函数时,debug函数失效, release可以使用,最后发现是xmake.lua写的有问题 option("OpenCV4.6.0")set_showmenu(true) set_default(true) set_category(&…...
ES分布式搜索-IK分词器
ES分词器-IK 1、为什么使用分词器? es在创建倒排索引时需要对文档分词;在搜索时,需要对用户输入内容分词。但默认的分词规则对中文处理并不友好。 我们在kibana的DevTools中测试: GET /_analyze {"analyzer": "…...
基于卷积神经网络的野外可食用植物分类系统
温馨提示:文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 本文详细探讨了一基于深度学习的可食用植物图像识别系统。采用TensorFlow和Keras框架,利用卷积神经网络(CNN)进行模型训练和预测,并引入迁移学习模型…...
Raingad IM即时聊天/即时通讯网站源码,附带系统搭建教程
支持功能 支持单聊和群聊,支持发送表情、图片、语音、视频和文件消息单聊支持消息已读未读的状态显示,在线状态显示群聊创建、删除和群成员管理、群公告、群禁言等支持置顶联系人,消息免打扰;支持设置新消息声音提醒,…...
for语句的实际应用(3)
3145:【例24.3】 奇数求和 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 9847 通过数: 5442 【题目描述】 计算非负整数 m 到 n(包括 m 和 n)之间的所有奇数的和,其中,m 不大于 n,且 n 不大…...
c++ Windows获取软件安装列表信息
链接 #include <windows.h> #include <stdio.h> #include <iostream> #include <vector>using namespace std;#ifndef MSVCR #define _T #define _tcscpy strcpy #define _stprintf sprintf #define _tcscmp strcmp #endifclass SetupSoftInfo { publ…...
音视频学习笔记——c++多线程(一)
✊✊✊🌈大家好!本篇文章主要整理了部分多线程相关的内容重点😇。首先讲解了多进程和多线程并发的区别以及各自优缺点,之后讲解了Thead线程库的基本使用。 本专栏知识点是通过<零声教育>的音视频流媒体高级开发课程进行系统…...
消息队列常见问题
总的来讲,消息队列常见问题要么消息不能多,要么不能少,还有顺序性,以及积压处理的问题等。 1.消息不能多 也就是说,消息不能重复消费,随之带来的幂等性问题。 解决:一般结合业务场景…...
【leetcode热题】二叉树的前序遍历
难度: 中等通过率: 49.5%题目链接:. - 力扣(LeetCode) 题目描述 给定一个二叉树,返回它的 前序 遍历。 示例: 输入: [1,null,2,3] 1\2/3 输出: [1,2,3]进阶: 递归算法很简单,你可以通过迭代…...
Linux命令记不住?保姆级教程来了
在软件开发过程中,Linux操作系统因其稳定性、安全性和高效性而备受青睐。作为开发者,熟练掌握Linux常用命令,不仅可以提高工作效率,还能更好地管理服务器和进行代码部署。本文将介绍一些开发常用的Linux命令及其应用场景ÿ…...
基于GitBucket的Hook构建ES检索PDF等文档全栈方案
背景 之前已简单使用ES及Kibana和在线转Base64工具实现了检索文档的demo,预期建设方案是使用触发器类型从公共的文档源拉取最新的文件,然后调用Java将文件转Base64后入ES建索引,再提供封装接口给前端做查询之用。 由于全部内容过长ÿ…...
C语言:数组、字符串知识点整理:
数组:(长度的计算) 补充:数组长度sizeof(arr)/sizeof(arr[0]) 注意:!!!不适用于当arr 充当形参时(函数传参)!!! 因为函数…...
Linux mmap系统调用
文章目录 前言一、mmap()函数简介二、代码演示2.1 mmap使用场景2.2 私有匿名映射2.3 私有文件映射2.4 共享匿名映射2.5 共享文件映射 参考 前言 NAMEmmap, munmap - map or unmap files or devices into memorySYNOPSIS#include <sys/mman.h>void *mmap(void *addr, siz…...
VSCode搭建ARM开发环境
为了构建Cortex M系列单片机免费开源的开发环境,网络上了解来看VSCODEGCCJLINK是一套比较高效的组合方式,下面记录环境搭建的流程。 我这边的PC环境为 WIN7专业版64bit。 需要用到的工具 Visual Studio CodeSTM32CubemxARM GCC 交叉编译工具链&#x…...
centos7 python3.12.1 报错 No module named _ssl
https://blog.csdn.net/Amio_/article/details/126716818 安装python cd /usr/local/src wget https://www.python.org/ftp/python/3.12.1/Python-3.12.1.tgz tar -zxvf Python-3.12.1.tgz cd Python-3.12.1/ ./configure -C --enable-shared --with-openssl/usr/local/opens…...
探索HTTP协议:网络通信的基石
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…...
从all shards failed到精准定位:一次Elasticsearch mapping字段配置的排错实战
1. 当Elasticsearch突然罢工:从"all shards failed"开始的故事 那天早上,我正悠闲地喝着咖啡,突然收到报警短信——生产环境的搜索服务挂了。登录Kibana一看,满屏都是"search_phase_execution_exception: all shar…...
别再被DCOM折磨了!Windows 10/11下OPC DA远程通讯的保姆级配置指南(附KepServer连接测试)
工业自动化工程师必看:Windows 10/11下OPC DA远程通讯全攻略 在工业自动化领域,OPC DA协议作为连接不同设备和系统的桥梁,其重要性不言而喻。然而,随着操作系统从Windows 7升级到Windows 10/11,许多工程师发现原本顺畅…...
youlai-mall认证授权中心:Spring Authorization Server OAuth2扩展
youlai-mall认证授权中心:Spring Authorization Server OAuth2扩展 【免费下载链接】youlai-mall 🚀基于 Spring Boot 3、Spring Cloud & Alibaba 2022、SAS OAuth2 、Vue3、Element-Plus、uni-app 构建的开源全栈商城。 项目地址: https://gitcod…...
OpenClaw与系统环境冲突:Windows/Mac系统兼容问题解决指南
OpenClaw 与系统环境冲突:Windows/Mac 系统兼容问题解决指南引言在当今多平台协作的时代,软件能否在不同操作系统上顺畅运行变得至关重要。OpenClaw,作为一款功能强大的专业工具(例如:数据处理、设计、开发环境等&…...
CLAP音频分类降本提效:相比微调方案节省90%标注与训练成本
CLAP音频分类降本提效:相比微调方案节省90%标注与训练成本 1. 音频分类的新选择 传统音频分类需要大量标注数据和长时间训练,现在有了更简单的方法。CLAP音频分类技术让你不用标注一张标签,不用训练一分钟模型,就能完成专业级的…...
别慌!React日期组件报错#31?手把手教你用Moment.js搞定日期格式转换
React日期组件报错#31的终极解决方案:从错误解码到Moment.js实战 最近在重构一个活动管理系统时,遇到了一个令人头疼的问题——每当点击编辑按钮回显表单数据时,控制台就会抛出Uncaught Invariant Violation: Minified React error #31。作为…...
如何快速解密网易云音乐NCM文件?这款免费工具让你轻松实现音乐自由
如何快速解密网易云音乐NCM文件?这款免费工具让你轻松实现音乐自由 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是否曾经下载了心爱的网易云音乐,却发现这些NCM格式的文件只能在特定软件中播放ÿ…...
Jaeles API接口详解:构建自定义安全工具链的完整指南
Jaeles API接口详解:构建自定义安全工具链的完整指南 【免费下载链接】jaeles The Swiss Army knife for automated Web Application Testing 项目地址: https://gitcode.com/gh_mirrors/ja/jaeles Jaeles作为一款自动化Web应用测试的瑞士军刀,其…...
从输入URL到网页打开:彻底搞懂 IP、ARP、ICMP 是如何分工协作的
很多人学过 OSI 七层、TCP/IP、IP、ARP、ICMP,却依然说不清:浏览器里敲下一个网址,数据包到底是怎么一步步走到服务器的?MAC 地址在哪儿变?IP 地址又在哪儿改?ICMP 什么时候插一脚?这篇文章用一…...
从零上手:PyCharm专业版远程连接AutoDL服务器实战指南
1. 环境准备:PyCharm专业版与AutoDL服务器 第一次用PyCharm连远程服务器确实容易懵,我刚开始折腾的时候光配环境就花了半天。先说清楚两个核心装备:PyCharm专业版和AutoDL云服务器。社区版PyCharm没有远程开发功能,专业版可以官网…...
