暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MYSQL的优化

寒冷的冰凌 2021-05-25
391
MySQL的优化中,我们可以从sql语句的查询优化数据库的结构优化插入数据优化服务器优化(因为最终MySQL要部署到服务器上,所以对服务器硬件优化,可以提高mysql的运行速度和效率)、优化MySQL的参数(优化MySQL的参数可以提高资源利用率,从而提高MySQL服务器性能)。
一、查询语句的优化

1.什么是索引?

数据库索引:是数据库管理系统中排序的数据结构,以协助快速查询、更新数据数据库操作。索引的实现使用bb-ztree(多路搜索树、以及二分查找法))以及变种b+ztree
2.为什么是树?

MySQL可以为多个字段建立索引,一个索引可以包括16 个字段

3.子查询优化?

   什么是子查询?子查询就把查询好结果集,当成另外一条sql的条件;

select * from test id=(Select max(id) from test);

sql中尽量不要使用子查询,因为执行子查询的时候,mysql需要创建临时表,所以子查询就会受到影响,多了一个创建临时表销毁临时表的过程.

sqlServer创建临时表:和创建普通表是一样的表名前面加# 表示局部临时表;加## 表示全局临时表.例如:
create table #临时表名(字段名 约束条件,字段名2 约束条件.....

   create table ##全局临时表名(字段名 约束条件,字段名2 约束条件.....

   Create table persons (id int,name varchar(255),city varchar(255))

二、数据库结构优化


可以把字段很多的表,分成多个表。
把数据查询次数少的字段分离出去,例如: 备注

三、插入数据优化


MySQL结构和性能设计》 中会提及到存储引擎。
插入数据的时候,影响插入速度的主要是索引唯一性校验插入的条数

1.为什么索引会影响插入速度?

因为我们插入数据的时候,不只是把数据写入数据库文件,还要把这个数据写到索引中,索引越多插入的就越慢。

插入数据的优化,根据不同的存储引擎优化的手段一样,MySQL的存储引擎有myISAM InnoDB.

 myISAMMySQL的默认存储引擎

 myISAM 不支持外键,数据的正确性和数据的类型会可能会受到影响

 Mysql 的存储引擎myISAM innoDB 的区别?

2.MyISAM存储引擎优化
2.1禁用索引

Alter 表名 字段名 disable key   禁用索引

Alter 表名 字段名 enable key   开启索引

 总结:在插入非空表的时候,MySQL会根据表的索引对插入的记录建立索引。插入大量数据时,建立索引会降低插入数据速度。

如果是空表批量插入数据,则不需要进行操作,因为myISAM的引擎的表是导入数据后才建立索引

3.禁用唯一性检查

Set  unique_checks=0  禁用唯一性检查

Set  unique_checks=1  开启唯一性检查

总结:  唯一性校验会降低插入记录的速度

例如:主键id 不能重复,每次进来需要校验检查

4.批量插入数据
插入数据时,可以使用一条insert语句插入一条数据,也可以插入多条数据

总结:sql语句执行的时候,内部是有一个sql检查器的,他先在内部缓存中查一下看有没有相同的sql语句,有的话直接拿去用就可以了
如果你的sql语句第一次来就会检查你的语法,语法定义然后存到缓存,然后在拿到数据结果,然后返回给你

第二种翻译、解释了一次,直接在我们缓存中去拿所以更快些

5. innoDB存储引擎优化

5.1禁用唯一性检查

5.2禁用外键检查

总结:innoDb支持外键检查MyISAM 不支持外键检查,所以没有 就没有禁用外键检查这一说

5.3禁用自动提交

总结:多了一层事物的控制,所以会影响插入的速度。插入前禁止事物自动提交,数据插入后在恢复,可以提高插入速度。

四、服务器优化


4.1优化服务器硬件

总结:MySQL最终跑向我们的服务器的,所以我们的服务器也是可以优化的。

   数据在内存中来操作的。


五、优化Mysql的参数


文章转载自寒冷的冰凌,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论