MySQL优化

MySQL优化

九月 08, 2022

MySQL优化

总结:避免做全表查询!

1.尽量使用varchar类型数据存储字符,少使用char类型的数据

2.避免使用 select *的全表查询,根据所需字段,进行索引

3.尽量不要在where子句的右边进行计算(表达式计算),会导致放弃索引,进行全表查询。比如:select id from t where num=num/2

4.尽量不使用IN 或者 not In 进行检索,否则也是进行全表查询

5.避免在where子句中使用 != 或者<>操作符,否则又去全表查询

6.避免在where子句中对字段进行函数操作

7.避免使用在where中使用or进行拼接索引,否则也是全表查询。可以使用union all

8.尽量不要使用Like查询,要是想提高,可以采用全文索引

学习更多请前往—>


MySQL常用存储引擎

  • InnoDB引擎

1.事务安全的

2.支持外键、外键约束、行级锁机制

3.支持全文索引

4.InnoDB是行锁

  • MyISAM引擎

1.MySQL 5.5以前默认的存储引擎

2.分为静态MyISAM、动态MyISAM 和压缩MyISAM,不管是何种MyISAM表,目前它都不支持事务,行级锁和外键约束的功能

3.MyISAM是表锁(每次更新增加删除都会锁住表)

  • MyISAM mergr引擎

很快的读/写速度,对数据安全性要求较低

  • memory(heap)引擎

这种类型的数据表只存在于内存中。它使用散列索引,所以数据的存取速度非常快。因为是存在于内存中,所以这种类型常应用于临时表中。

  • archive引擎

这种类型只支持select 和 insert语句,而且不支持索引。

MySQL 索引

  • 定义:是一种将数据库中一列(或多列)的值进行排序的结构,使用索引可快速访问数据库表中的特定信息。使用B树进行排序

索引的类型

①分类

  • 聚簇索引

按照数据存放的物理位置为顺序的,聚簇索引能提高多行检索的速度

  • 非聚簇索引

不按照数据存放的物理位置排序,对于单行检索很快

②根据数据库的功能,可创建的索引

1.唯一索引:进行唯一索引的列,不允许出现两个重复的值(允许空值)

2.组合索引:在多个字段上进行创建索引,只有在查询中

3.普通索引:基本的索引,没有任何限制,用于加速查询,数据可以重复

4.主键索引:主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。当在查询中使用主键索引时,它还允许对数据的快速访问

具体学习索引内容,前往百度百科–>


MySQL执行逻辑

先看图

d

客户端/服务端 -> 连接器 -> (查询缓存,8.0版本以前)-> 分析器 -> 优化器 -> 执行器 -> 调用存储引擎接口

Service层

1.连接器

判断用户的账户和密码,权限获取

尽量减少建立连接的动作,使用长连接

2.查询缓存

缓存通过哈希表的形式存储(key-value),如果命中了key,则直接返回value给客户端。

MySQL8.0以后删除了,弊大于利

查询缓存的失效非常频繁,只要有对一个表的更新,这个表上所有的查询缓存都会被清空。对于更新压力大的数据库来说,查询缓存的命中率会非常低。除非你的业务就是有一张静态表(即很少进行增删改),很长时间才更新。

3.分析器

分为 语法解析 和 预处理,在这个阶段会解析SQL语句的语义,并进行关键词和非关键词进行提取、解析,并组成一个解析树。

d

4.优化器

简单来说就是:匹配最合适的索引,决定表的连接顺序

5.执行器

执行器会根据表的引擎定义,调用存储引擎API对表进行读写。存储引擎Api只是抽象接口,下面还有一层存储引擎层,具体实现还要看表选择的存储引擎