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…...
linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...
力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...
【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error
在前端开发中,JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作(如 Promise、async/await 等),开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝(r…...
Chrome 浏览器前端与客户端双向通信实战
Chrome 前端(即页面 JS / Web UI)与客户端(C 后端)的交互机制,是 Chromium 架构中非常核心的一环。下面我将按常见场景,从通道、流程、技术栈几个角度做一套完整的分析,特别适合你这种在分析和改…...
Linux部署私有文件管理系统MinIO
最近需要用到一个文件管理服务,但是又不想花钱,所以就想着自己搭建一个,刚好我们用的一个开源框架已经集成了MinIO,所以就选了这个 我这边对文件服务性能要求不是太高,单机版就可以 安装非常简单,几个命令就…...
