MySQL SQL调优之索引
本篇记录MySQL的索引知识学习笔记,也方便自己以后查找复习
一、索引的概念
MySQL官方给出的索引定义:索引(Index)是帮助MySQL高效获取数据的数据结构。所以说索引就是排好序的快速查找数据结构
二、索引分类
MySQL的索引可以分为几种:
单值索引:单值索引就是只包含一个列的索引
唯一索引:唯一索引要求索引列的必须是唯一的,比如说主键或者unique索引,但是还是允许空值
复合索引:复合索引就是包含多个列组成的索引
三、索引用法
创建索引
create [unique] index indexName on tableName(columnName(length));
比如给dept表创建索引idx_dept_id
create idx_dept_id on dept(id);
修改索引
ps:修改索引也可以用于新增索引
语法:
alter tablename add [unique] index indexname on columnName(length);
删除索引
drop index indexname on tablename;
查看索引
show index from tablename ;
如果要显示换行可以加上\G,不过就不能加上分号
show index from tablename \G
附录:
来自尚硅谷老师总结的新增索引的方法:
# 添加一个主键,主键是唯一的,不能为Null
alter table tablename add PRIMARY KEY(columnName);
#创建唯一索引,要求索引唯一,不过允允许空值
alter table tablename add unique index indexname on(columnName);
# 创建普通的索引,索引数据可以不唯一
alter table tablename add index indexname on(columnName);
# 指定索引为FullText,用于全文索引
alter table tablename add FULLTEXT indexname on(columnName);
四 、索引架构简介
MySQL的索引结构可以分为:
BTree索引
Hash索引
full-text全文索引
R-Tree索引
从图可以看出BTree索引的结构其实就是一棵B+树,并不一定是二叉树,也有可能是一棵多叉树,MySQL也是分为段区块这种结构的,如图,浅蓝色部分就是一个磁盘块,蓝色部分表示数据项,而黄色部分表示指针
假如我要查找29这个值,就是遍历下来,分别查找磁盘块1、磁盘块3、磁盘块8,根据指针查找下来,速度非常快,假如有几百万数据的话,能走索引的情况,是非常快的,性能对比可想而知
注意:只有叶子节点(最下面的节点)是存储要查找的数据的,非叶子节点存储的数据只是用于指针索引的数据项而已
五、索引适用的情况
1、频繁用于查询的条件适合建立索引
2、主键默认要加上Primary索引
3、和其它表有外键关系的列建立索引
4、where条件后面的条件列可以建上索引
5、用于排序order by的列可以加上索引
6、用于分组group by的列可以加上索引
注意:需要经常修改的列不适合建立索引,因为更新数据的同时也会重新构建索引,比较耗性能;在高并发的情况,更倾向于建立组合索引,因为一般来说,查询很少有一个条件,一般是多个条件,复合索引比较适合
六、索引不适用的情况
1、需要经常增删改的表
2、表的记录很少的情况,加了索引效果不明显
3、如果某个数据列包含很多重复的数据,比如用户信息表的性别这个列,一般只有两种情况,所以加了索引,是没有太大的实际效果的
注意:索引应该加在经常查询或者排序的列,数据重复而且分布很平均的情况,是不适合加索引的
程序员工具站点:草根工具www.idevtool.com
个人笔记站点:草根笔记note.idevtool.com
MySQL SQL调优之索引的更多相关文章
- MySQL 性能调优之索引
原文:http://bbs.landingbj.com/t-0-245452-1.html 对于索引的优化,我们第一需要找到合适的字段,第二创建索引找到合适的顺序,第三要找到合适的比例,第四是要做合适 ...
- MySQL索引和SQL调优手册
MySQL索引 MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等.为了避免混乱,本文将只关注于BTree ...
- 你们一般都是怎么进行SQL调优的?MySQL在执行时是如何选择索引的?
前言 过年回来的第二周了,终于有时间继续总结知识了.这次来看一下SQL调优的知识,这类问题基本上面试的时候都会被问到,无论你的岗位是后端,运维,测试等等. 像本文标题中的两个问题,就是我在实际面试过程 ...
- 【叶问】 MySQL常用的sql调优手段或工具有哪些
MySQL常用的sql调优手段或工具有哪些1.根据执行计划优化 通常使用desc或explain,另外可以添加format=json来输出更详细的json格式的执行计划,主要注意点如下: ...
- 《高性能SQL调优精要与案例解析》一书谈主流关系库SQL调优(SQL TUNING或SQL优化)核心机制之——索引(index)
继<高性能SQL调优精要与案例解析>一书谈SQL调优(SQL TUNING或SQL优化),我们今天就谈谈各主流关系库中,占据SQL调优技术和工作半壁江山的.最重要的核心机制之一——索引(i ...
- SQL调优
# 问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用 系统提交实际应用后,随着数据库中数据的增加,系 ...
- MySQL性能调优的10个方法 - mysql数据库栏目
摘要: https://edu.aliyun.com/a/29036?spm=5176.11182482.related_article.1.hbeZbF 摘要: MYSQL 应该是最流行了 WEB ...
- MySql(十一):MySQL性能调优——常用存储引擎优化
一.前言 MySQL 提供的非常丰富的存储引擎种类供大家选择,有多种选择固然是好事,但是需要我们理解掌握的知识也会增加很多.本章将介绍最为常用的两种存储引擎进行针对性的优化建议. 二.MyISAM存储 ...
- MySQL性能调优与架构设计——第 18 章 高可用设计之 MySQL 监控
第 18 章 高可用设计之 MySQL 监控 前言: 一个经过高可用可扩展设计的 MySQL 数据库集群,如果没有一个足够精细足够强大的监控系统,同样可能会让之前在高可用设计方面所做的努力功亏一篑.一 ...
- MySQL性能调优与架构设计——第 17 章 高可用设计之思路及方案
第 17 章 高可用设计之思路及方案 前言: 数据库系统是一个应用系统的核心部分,要想系统整体可用性得到保证,数据库系统就不能出现任何问题.对于一个企业级的系统来说,数据库系统的可用性尤为重要.数据库 ...
随机推荐
- 奥迪借助Karpenter为关键业务节省63%成本
原文链接: https://aws.amazon.com/cn/solutions/case-studies/audi-efficient-compute-case-study/ 翻译:cloudpi ...
- 七、FreeRTOS学习笔记-中断管理
FreeRTOS学习笔记-中断管理 中断:让CPU打断正常运行的程序,转而去处理紧急的事件(程序) 中断执行机制,可简单概括为三步: 1.中断请求:外设产生中断请求(GPIO外部中断.定时器中断等) ...
- input输入框与button按钮之间存在空隙
出现空隙是写代码的时候换行导致的,给input框加上float:left 可解决
- Python之解析配置文件
[.env] 1) 使用python-dotenv 安装: pip install python-dotenv 示例配置文件: ADMIN_HOST = https://uat-rm-gwaaa.cn ...
- java/spring项目打成jar包供第三方引用方案
分类 单独工具类 比如StringUtils 注入类工具类 实现 单独工具类 将项目打jar包 项目结构 开始打包: 在目标项目中pom引用直接使用 注入类工具类 当我们想要利用SpringBoot封 ...
- JavaWeb 入门到实战
注:看狂神说做的笔记 1.基本概念 1.1 前言 web开发: web:网页的意思,www.baidu.com,就是一个web页面 静态web: 不与数据库进行交互,静态显示网页数据(你刚学 html ...
- 基于surging的木舟平台如何分布式接入设备
一.概述 上篇文章介绍了木舟通过基于木舟平台浅谈surging 的热点KEY的解决方法,那么此篇文章将介绍基于surging的木舟平台如何分布式接入设备. 木舟 (Kayak) 是什么? 木舟(Kay ...
- S2P销讯通-主数据对于客户关系管理系统的重要性
由于业务发展,各大企业的业务系统经历了从无到有,从简单到复杂,从而形成了一个又一个的业务系统,比如OA.HR.CRM.ERP等等. 主数据在客户关系管理系统(CRM)中扮演着至关重要的角色.主数据是指 ...
- 真正“搞”懂HTTPS协议19之HTTPS优化
这是本系列的最后一篇了,其实本篇的内容也跟前两篇TLS的握手和优化有关系.其实HTTPS的核心就是TLS的明文握手连接,前两篇我们花了很大的篇幅来聊这些,另外一个就是在TLS握手完成后的密文传输部分了 ...
- VLC web(http)控制 (4) 服务器文件获取
通过链接 http://127.0.0.1:8080/requests/browse.xml?uri=file%3A%2F%2F~ 可以获取服务器默认目录所有文件. 其中file%3A%2F%2F~是 ...