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 ...
随机推荐
- Java多线程专题4: 锁的实现基础 AQS
合集目录 Java多线程专题4: 锁的实现基础 AQS 对 AQS(AbstractQueuedSynchronizer)的理解 Provides a framework for implementi ...
- contos 6.9 和 centos7 配置docker?
一.contos 6.9 配置docker? 1.检查centos的内核,因为目前docker的版本所支持的centos最低内核版本为2.4 // uname -r // 2.6.32-696.el6 ...
- Redis 源码简洁剖析 07 - main 函数启动
前言 问题 阶段 1:基本初始化 阶段 2:检查哨兵模式,执行 RDB 或 AOF 检测 阶段 3:运行参数解析 阶段 4:初始化 server 资源管理 初始化数据库 创建事件驱动框架 阶段 5:执 ...
- open policy agent 语法总结
OPA 文档模型 OPA将从外部加载的数据成为基本文档(base documents),有规则产生的值成为虚拟文档(virtual documents),此处"虚拟"的意思表示文档 ...
- unicode家族
定义 如果把各种文字编码形容为各地的方言,那么Unicode就是世界各国合作开发的一种语言. Unicode 只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储. UTF ...
- CentOs7.6配置邮件服务并发送邮件
1.使用Yum 来安装依赖包 yum -y install sendmail yum -y install mailx 2.获取授权码 下面以腾讯为例 https://service.mail.qq. ...
- squid 代理服务器应用
squid 代理服务器应用 1.Squid 代理服务器 : Squid 主要提供缓存加速.应用层过滤控制的功能. 代理的工作机制: 代替客户机向网站请求数据,从而可以隐藏用户的真实IP地址. 将获得 ...
- RAID磁盘阵列与配置
RAID磁盘阵列与配置 目录 RAID磁盘阵列与配置 一.RAID磁盘阵列详解 1.RAID磁盘阵列概述 2.RAID 0(条带化存储) 3.RAID 1(镜像存储) 4.RAID 5 5.RAID ...
- CSS多种方式实现元素水平垂直居中
html结构: <div class="center">确定宽高水平垂直居中</div> <div class="center2" ...
- LeetCode随缘刷题之回文数
package leetcode.day_01_30; /** * 给你一个整数 x ,如果 x 是一个回文整数,返回 true :否则,返回 false . * <p> * 回文数是指正 ...