自学内容网 自学内容网

Mysql优化(常见优化)

  1. 插入数据

批量插入:因为一条条插入时,每一条数据的插入都要与数据库建立连接,并且关闭连接

手动提交事物:

主键顺序插入

  1. 大批量数据插入

如果一次性需要插入大批量数据,使用insert语句插入性能较低,此时可以使用MySQL数据库提供的load指令进行插入。操作如下·

  1. 客户端连接服务端时,加上参数 --local-infile

   mysql  --local-infile  -u  root  -p

  1. 设置全局参数 local_infile为1,开启从本地加载文件导入数据的开关

set global local_infile = 1;

  1. 执行local指令,将准备好的数据加载到表结构中

local data local infile ‘/xx/yy/sql.log’ into table 表名 fields terminated by ‘,’ lines terminated  by ‘\n’;

  1. 主键优化

主键设计原则:

  • 满足业务需求的情况下,尽量降低主键的长度

二级索引下,二级索引的也字节点中挂的是主键,如果主键较长,二级索引比较多,

将会占用大量的磁盘空间,在搜索时将会耗费大量的磁盘IO

  • 插入数据时,尽量选择顺序插入,选择使用AUTO_INCREMENT自增主键

顺序插入时,当一个page写完后才会写另一个page,而乱序插入可能会引起页分裂现象

最后变成:

  • 尽量不要使用UUID作为做主键或者其他自然主键,如身份证号

主键较长,二级索引比较多,将会占用大量的磁盘空间,在搜索时将会耗费大量的     磁盘IO

  • 业务操作时,避免对主键的修改
  1. order by优化

排序字段加上索引

两个排序字段,一正一倒呢?

 

所以我们优化时就是尽可能将using filesort给优化点

可以通过创建索引来解决

优化后的结果为:

排序字段不加索引:

总结:

4、group by优化

主要是针对索引进行优化。验证下加索引与不加索引时 分组的效率

加上索引后,效率会得到提升

关于索引的使用

5、limit优化

需要时间较久,如果有1000万条数据,时间大概会在10s级别

可以通过覆盖索引+子查询的方式优化

6、count优化

count的用法:

用法截图如下:

效率:

7、update优化

行锁还是表锁

两个事物当都修改id有索引对应的信息时

update course set name = ‘kafka’ where id=4

update course set name = ‘java’ where id=1

两个事物的修改操作都能成功,因为此时锁的是行级锁

两个事物当都修改name无索引对应的信息时

update course set name = ‘kafka’ where name=’java’

update course set name = ‘java’ where name=’mysql’

第一个事物回马上修改成功,但是第二个事物的修改会等第一个事物提交后才能修改成功,因为name没有索引,此时锁的是表级锁

为name加上索引后两个事物都修改name对应的信息时

两个事物的修改操作都能成功,因为此时锁的是行级锁


原文地址:https://blog.csdn.net/2301_80419036/article/details/142614194

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!