再学Mysql高级(学习笔记) 一 概念.索引

目录

一.mysql逻辑架构,优化

1.1内置优化系统:

1.2 存储引擎

MyISAM

InnoDB

Memory

二 sql优化前瞻 

1.sql性能慢的原因

2.Mysql的sql执行加载顺序

三 索引

1.索引是什么

2.索引的好处

3.索引的缺点

4.索引的分类

5 建立索引的条件


一.mysql逻辑架构,优化

1.1内置优化系统:

mysql中有内置的优化系统,比如开发者写查询语句关心的是select,但mysql底层优化组件会用自己的优化方式去解读sql语句,(比如从from开始)。mysql会把所有语句优化成自己认为最优的处理方式,这个过程需要时间(不多)但不一定是最符合项目的极端情况最优解,于是类似于alibaba这种公司把mysql的优化组件去掉,强制优化成完全符合自己业务逻辑的执行,而对于他们,mysql没有优化功能,只有执行功能.(只在极端业务场景下)

1.2 存储引擎

mysql有不下十种可拔插式存储引擎,打个比方,一辆越野车有不同的发动机,有的适合跑沙漠,有的适合跑城市,那么不同的发动机就类似于mysql的存储引擎,对于不同情况使用不同存储引擎可以将性能最大化。

了解三种

MyISAM

它不支持事务,也不支持外键,尤其是访问速度快,对事务完整性没有要求或者以SELECT、INSERT为主的应用基本都可以使用这个引擎来创建表。表锁,不适合高并发的操作.,只缓存索引,不缓存真实数据

InnoDB

InnoDB是一个健壮的事务型存储引擎,为用户操作非常大的数据存储提供了一个强大的解决方案。InnoDB就是作为大多数默认的存储引擎,支持事务,外键,行锁,适合高并发的操作,缓存真实数据,对硬件性能要求高,内存大小直接影响性能

Memory

为得到最快的响应时间,采用的逻辑存储介质是系统内存。虽然在内存中存储表数据确实会提供很高的性能,但数据都是暂时性的.他要求在Memory中存储的数据都是长度不可变的。所以BLOB和TEXT这样的长度可变的数据类型不能用.(VARCHAR可以,因为mysql底层认为VARCHAR是长度不可变的char)

二 sql优化前瞻 

1.sql性能慢的原因

 ① sql写的烂  (包括各种子查询导致用不上索引,或者没建索引)

 ② 索引失效  (建了索引没用上)

 ③join太多

 ④服务器调优及参数设置

2.Mysql的sql执行加载顺序

FROM ➡ ON ➡ JOIN ➡ WHERE ➡ GROUP BY ➡ HAVING  ➡ SELECT ➡ DISTINCT ➡ LIMIT 

个人理解:条件>内容>内容处理

先加载条件  然后处理内容 最后处理内容集

三 索引

1.索引是什么

在数据之外,数据库还维护着一种满足特性查找算法的数据结构,这种数据结构引用或指向数据,这样就可以在数据结构上快速的查找到想要的数据,这种数据结构就是索引 .  所以 ,什么是索引?

答:※※※※: 排好序的快速查找数据结构  

理解:1.查找快 2 排好序 3 数据结构

索引会影响sql where后面的条件和查找的内容   这个后文会详细记录

tips:1.如果没特殊说明,索引都是btree索引  

       2.业务的逻辑删除很多也是为了维护索引

       3.索引以数据结构的形式存储在硬盘中

2.索引的好处

1.类似于图书馆书籍建立索引,提高检索效率,降低数据库IO成本

2.通过索引对数据进行排序,降低了排序成本,减少CPU消耗

tips:快速查找的数据结构 : 排序   查找

3.索引的缺点

1.索引也是一张表 ,也要占用空间

2.虽然增加了查找速度,但是在更新表的操作中,不光要维护数据,还要维护索引列

3.建立索引肯定不是一次性建好的,是通过不断的完善更新出最优的索引

4.索引的分类

1.单值索引 :一个索引只包含单列,一个表可以有多个单值索引

2.唯一索引 :索引列的值必须唯一,可以为空

3.复合索引: 一个索引包含多个列

5 建立索引的条件

1.主键自动建立唯一索引

2.频繁作为查询条件的字段应建立索引

3.查询中和其他表相关联的字段,外键应建立索引

4.频繁更新的字段/表 不适合建立索引

5.where 条件中用不到的字段不适合建立索引

6.单键和组合索引中建议建立组合索引

7.查询中排序的字段,如果通过索引去访问,将大大提高效率

8.分组字段应建立索引(分组和排序在后文会详细介绍)

9.表记录太少不适合建立索引

10.一个字段如果包含过多的重复数据,不适合建立索引  例如(性别、国籍)

tips:在mysql底层 分组必排序  所以分组和排序都建议建立索引

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值