Mysql高级操作学习笔记:索引结构、树的区别、索引优缺点、创建索引原则(我们对哪种数据创建索引)、索引分类、Sql性能分析、索引使用、索引失效、索引设计原则
Mysql高级操作
索引概述:
索引是高效获取数据的数据结构
索引结构:
B+Tree()
Hash(不支持范围查询,精准匹配效率极高)
树的区别:
二叉树:可能产生不平衡,顺序数据可能会出现链表结构
平衡二叉树:插入需要自旋,性能根据层级而定,性能不稳定
b+tree:
主键聚簇叶子节点存放数据,非叶子节点存放索引,
二级索引非叶子节点存放索引,叶子节点存放主键
索引优缺点:
优点:
大大加快查询速度
使用分组和排序时候可以显著减少分组和排序时间
唯一索引可以保证字段唯一
可以加速表与表之间的连接
缺点
创建和维护索引需要消耗时间,随着数据量增加时间也会增加
占用磁盘空间
对表进行urd操作时候也要动态维护,urd性能会下降
创建索引原则(我们对哪种数据创建索引):
更新频繁数据不易创建索引
数据量少的没必要创建,全表和用索引可能差不多
首先考虑在where和orderby字段建立索引
索引分类:
单列索引(只包含单个列):
主键索引:唯一且不为null,一个表只能有一个,(聚集索引:叶子节点下存储数据)
唯一索引:唯一且只能有一个Null值(二级索引,叶子节点存储主键)
普通索引:没有限制(二级索引,叶子节点存储主键)
组合索引/复合索引(包含多列):
为了避免回表,进行更高效的查询
全文索引:
like+%(InnoDB(5.6之后支持)默认3个字符,最大84,MyISam默认4最小1个字符)
空间索引(使用较少)
Sql性能分析
数据库的执行频次
慢查询日志
profile Sql执行查询
explain/desc执行计划查询
索引使用
联合索引:
遵循最左原则,如果最左使用中间跳过了某个字段,会造成后面索引失效,范围查询右侧的列会失效,尽量是<= ,>=
索引失效:
索引列进行了函数运算
没有遵循最有匹配原则
字符串类型索引没有加'',造成隐士转换,导致索引失效
左模糊查询
如果最左使用中间跳过了某个字段,会造成后面索引失效,范围查询右侧的列会失效,尽量是<= ,>=
mysql优化器判定全表比用索引块
or链接一侧有索引,一侧没有索引
sql提示:
多个索引下,可以提醒执行器是由哪个索引,建议使用,忽略使用,强制使用
覆盖索引:
查询返回字段都在联合索引中会直接拿到数据,避免回表即联合索引
前缀索引:
针对字段数据库较大的建立索引,缩小索引长度
单列/联合索引:
避免单列索引在and情况下第二索引不生效,使用联合索引,使用恰当可避免回表
索引设计原则
表层面:数据量大,且查询频繁
字段层面:经常在where groupby orderby后的字段
索引层: 唯一的建立唯一索引,尽量联合索引,大文本尽量前缀索引
附加原则:
区分度较高
索引不易过多
索引不为null加上非空约束
所长度尽量短
Mysql高级操作学习笔记:索引结构、树的区别、索引优缺点、创建索引原则(我们对哪种数据创建索引)、索引分类、Sql性能分析、索引使用、索引失效、索引设计原则的更多相关文章
- mysql基础操作学习笔记(2)----索引
为什么要创建索引? 在此本人也带着相同的疑问,能够解释的仅仅是:为了减少数据库查询时所需要的速度.如果正常查询和索引查询所需时间相差很多倍时我们自然是需要索引的了. 想要知道结果,只能等我学得 ...
- mysql基础操作学习笔记(一)
1前期准备: SQL语言包涵以下4个部分: (1)数据定义语言(DDL):包括DROP, CREATE, ALTER等语句 (2)数据操纵语言(DML):包括INSERT, UPDATE, DELET ...
- MYSQL视图的学习笔记
MYSQL视图的学习笔记,学至Tarena金牌讲师,金色晨曦科技公司技术总监沙利穆 课程笔记的综合. 视图及图形化工具 1. 视图的定义 视图就是从一个或多个表中,导出来的表,是一个虚 ...
- mySQl数据库的学习笔记
mySQl数据库的学习笔记... ------------------ Dos命令--先在记事本中写.然后再粘贴到Dos中去 -------------------------------- mySQ ...
- Mysql数据库基础学习笔记
Mysql数据库基础学习笔记 1.mysql查看当前登录的账户名以及数据库 一.单表查询 1.创建数据库yuzly,创建表fruits 创建表 ) ) ,) NOT NULL,PRIMARY KEY( ...
- 【学习笔记】线段树—扫描线补充 (IC_QQQ)
[学习笔记]线段树-扫描线补充 (IC_QQQ) (感谢 \(IC\)_\(QQQ\) 大佬授以本内容的著作权.此人超然于世外,仅有 \(Luogu\) 账号 尚可膜拜) [学习笔记]线段树详解(全) ...
- 《PHP7底层设计与源码实现》学习笔记2——结构体对齐
书里给了一段代码,假如有个结构体如下: struct test { char a; int b; long c; void* d; int e; cha ...
- Javascript高级编程学习笔记(45)——DOM 操作表格及DOM动态集合
操作DOM表格 早些时候,HTML 还是以表格布局为主, 所以DOM操作表格是比较重要的一点 但是现如今 有其它的选择,所以表格的操作也就慢慢地淡出了人们的视线 所以这里也就不过多去详细展开,这里也就 ...
- MySQL4.0命令操作学习笔记
声明:下列内容并非原创,仅仅是最近学习笔记整理. -------------------------------------- 进入mysql安装路径bin目录下: 1.开启服务 winmysqlad ...
随机推荐
- pl/sql 编程!
一,pl/sql 是什么? --一.pl/sql 是什么? --1.sql是结构化查询语言. --2.编程语言一般都能够声明变量,写条件判断,循环.sql不具备这些特征,所有sql不是一门编程语言. ...
- Atcoder ARC-061
ARC061(2020.7.10) A 暴力 \(dfs\) 即可. B 考虑统计以每个点为矩阵中心的答案,显然一个黑点只会影响周围九个黑点,使用 \(map\) 来记录这个值,每次修改修改一下答案数 ...
- echarts图表的封装
其实echarts官网有个快速上手的教程,一般人看一遍也知道是怎么回事,先给个传送门吧--五分钟上手 引入方式多种多样就自己去官网看了--这里简单介绍echarts怎么用,下方的封装函数比较重要 1. ...
- JAVA中获取不同系统的换行符和获取系统路径路径分割符
简介 JAVA具有多平台特征,一次开发,多平台运行,主要依据JVM,但是不同的操作系统中换行符和分割符不同,故需要根据不同的操作系统去获取不同的符号. JAVA代码 @Test public void ...
- navicat连接mysql报错1251解决方案
感谢原文作者:XDMFC 原文链接:https://blog.csdn.net/xdmfc/article/details/80263215 问题描述 今天下了个 MySQL8.0,发现Navicat ...
- Charles中文乱码解决
n在VMOptions中加一项:-Dfile.encoding=UTF-8
- java命令- (学习)jps
jps(Java Virtual Machine Process Status Tool) 是java提供的一个显示当前所有java进程pid的命令,适合在linux/unix平台上简单察看当前jav ...
- js 保存并排序输入内容
转载请注明来源:https://www.cnblogs.com/hookjc/ /* Create By:jiangcheng_15 Create Date:2012-01-32 */ functio ...
- LBS应用之 根据一点的经纬度实现附近点的查询
这年头和LBS相关的应用越来越火.从foursquare的热闹程度就可见一般(什么,没听过 foursquare-. 哥们,你 out 了).和 LBS有关的应用一般都包括一些共同的操作,最常见的一个 ...
- pytorch学习
1 torch.hub torch.hub是一个包含计算机视觉和自然语言处理领域的诸多经典模型调用中心API 我没有运行成功代码 https://blog.csdn.net/qq_38410428/a ...