SQL优化之索引机制与性能问题

1.为什么需要SQL优化?

不为吃饭,不为工作,单单就是咱SQL写的垃圾!

1.1原因分析

  1. 性能低
  2. 执行时间等待时间太长
  3. SQL语句欠佳(问题的根源在于连接查询)
  4. 索引失效
    5.服务器参数设置不合理(缓冲区-线程数)

1.2 垃圾SQL语句示例与底层解析过程

编写过程
	select dinstinct  ..from  ..join ..on ..where ..group by ...having ..order by ..limit ..
解析过程
	from .. on.. join ..where ..group by ....having ...select dinstinct ..order by limit ...

2.重点总结:优化SQL就是优化索引

什么是索引?

  1. 先说一个十分浅显的定义:相当于书的目录(我们CRUD就比作查字典,就问你查字典没有目录,哥们你难受不!.)
  2. 在MySQL里用关键字INDEX表示
  3. 索引是帮助MySQL高效获取数据的数据结构
    主要是树形结构:
    B树(B数:希望大家心里都有我,因为MySQL就是用的我,作为索引)
    Hash树
    二叉树

B树的存储特性

  1. 一句话概括:左轻右重(左边存小的数,右边存大的数)
  2. 为啥左轻右重?

一般大家是右撇子吧! (博主除外,博主左撇子)你就想想当你陪你新new出来的那倾国倾城的老婆逛街,人家买买买,你给她拎东西,你重的东西肯定右手拎吧!

如下就是B树的索引存储原理

在这里插入图片描述

震惊!绝美主播<索引>姑娘可以提高查询效率

所以遇事不决,加索引?

你加一个试试?
项目经理腿都给你打折!

索引弊端

	1. 索引本身很大,可以存放在内存/磁盘里(通常放在硬盘)
	2. 索引不是什么情况都适用:如
		2.1 少量数据
		2.2 频繁更新的额字段
		2.3 几乎不用的字段
	3.索引会降低--增-删-改--的效率(值吗?用在合适的情况下的话就非常值!)

索引优势

	1.提高查询效率(说了N次了,换个说法)===>降低IO的使用率
	2.降低CPU的使用率  例如
...order by age desc  -- 本组排序查询

解析:
因为 B树索引 本身就是一个 好排序的结构,因此在排序时可以直接使用

查询流程与解析顺序不懂的看这里

https://www.cnblogs.com/annsshadow/p/5037667.html

3.BTree(B数)

什么是B树及其检索原理

在这里插入图片描述

MySQL为什么选择B树

1.三层BTree可以存上百万数据(不懂脑补IG(三叉戟原理,符合这个原理的可以理解为BTree))
2.	B Tree分为==>  B+树  B-树  我们普遍是用B+树
3.	一般B树的数据都是存放在叶子节点中
4.	B+树中查询任意的数据次数:为N次,那么这个数的高度就是N

4.索引分类与创建(重点)

分类

单值索引(单列)一个表可以投多个单值索引()
唯一索引不能重复(id)
复合索引多个列构成的索引(相当于二级目录)

创建索引

方式1

create <索引类型> 索引名称  on  表名称
-- 创建单值索引
	create index  dept_index on ta(dept);
--  唯一索引
create unique index name_index on tb(name);
-- 创建复合索引
create index dept_name_index on tb(dept,name);

方式2

--	单值:
alter table tb add index dept_index(dept) ;
-- 唯一:
		alter table tb add unique index name_index(name);		
-- 复合索引
alter table tb add index dept_name_index(dept,name);

注意:如果一个字段是primary key,则该字段默认就是 主键索引
主键索引与唯一索引最大的区别就是主键索引不能是null

-- 删除索引
		drop index 索引名 on 表名 ;
		drop index name_index on tb ;
查询索引:
		show index from 表名 ;
		show index from 表名 \G
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值