浅谈MySQL的性能优化

 更新时间:2023年08月25日 09:40:49   作者:抠脚的大灰狼  
这篇文章主要介绍了浅谈MySQL的性能优化,MySQL性能优化是通过对数据库的配置、查询优化以及索引优化等手段提高数据库的响应速度和处理能力,本文从多个层面对mysql性能优化进行了小结,需要的朋友可以参考下

服务器层面

  • innodb_buffer_pool_size

将缓冲池的大小设置的尽可能大,比如设为总内存的3/4。这样可以减少mysql的磁盘IO次数,使得尽可能地从缓冲池里读数据

  • innodb_log_file_size

在生产环境下,可以尽可能地把一些日志开关给关掉。比如通用查询日志,慢查询日志,错误日志。并且,将redo log的大小设置的足够大,避免由于redo log过小,导致频繁的脏页刷磁盘

  • innodb_flush_log_at_trx_commit

当对数据的安全性要求不是那么高的时候,可以考虑将此参数设为0或者2,减少刷磁盘频率

表设计层面

  • 对于统计和分析类等对实时性要求不高的需求(OLAP),设计中间表,避免直接查大量的raw data
  • 创建合理的冗余字段,以减少连表查询
  • 表中不经常使用的字段,或者存储了过多字段,考虑拆表
  • 每张表都要有个主键,且主键最好是自增的int类型

SQL语句层面

索引优化

  1. 为经常出现在where条件中的字段,需要排序的字段创建合适的索引(当读多写少时,可以考虑创建索引)
  2. 当需要对多个列建索引时,优先考虑组合索引,而不是多个单列索引,并且合理的组织组合索引的顺序,将筛选粒度大的列,放到组合索引的最左
  3. 尽量使用覆盖索引,而不要使用SELECT * ,可避免回表查询

LIMIT优化

  1. 若预计查询结果只有1条,使用LIMIT 1可以提前终止全表扫描
  2. 子查询优化

当使用LIMIT进行分页时,页码过大时,LIMIT的偏移量会很大,此时会导致MySQL扫描大量不需要的行,然后再丢弃,性能很差。

比如 LIMIT 10000,20 ,会先扫描前10000行,然后丢弃,最后取10000后的20行。

此时可以使用子查询来做优化

-- 原SQL
select * from product limit 10000,20;
-- 优化后的SQL
select * from product where id >(select id from product order by id limit 10000,1) limit 20;
-- 由于子查询使用了id主键索引,且查询是覆盖索引,可以很快的定位到10000的位置
-- 当单表查询,且主键已经是排序好的,可以直接简写如下
select * from product where id > 10000 limit 20;

其他优化

  1. 统计数量时,尽量用count(1),或count(列),而不要用count(*)
  2. 两张表进行关联时,关联字段最好都建立索引,且最好字段类型一致
  3. where 条件中不使用not in (可使用not exists)
  4. 合理使用慢查询日志,explain查看执行计划,show profile 查看SQL执行时的资源使用情况

到此这篇关于浅谈MySQL的性能优化的文章就介绍到这了,更多相关MySQL性能优化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 给Mysql添加远程访问权限的方法

    给Mysql添加远程访问权限的方法

    这篇文章主要介绍了给Mysql添加远程访问权限的方法的相关资料,需要的朋友可以参考下
    2015-03-03
  • mysql installer web community 5.7.21.0.msi安装图文教程

    mysql installer web community 5.7.21.0.msi安装图文教程

    这篇文章主要为大家详细介绍了mysql installer web community 5.7.21.0.msi,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-09-09
  • Mysql8.0不存在mysql.proc表的解决

    Mysql8.0不存在mysql.proc表的解决

    MySQL 8.0中官方移除了proc表,MySQL 5.7版本中还是存在proc表的,本文就介绍MySQL 8.0的替代方案,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • 从0到1学会MySQL单表查询

    从0到1学会MySQL单表查询

    这篇文章主要给大家介绍了关于如何从0到1学会MySQL单表查询的相关资料,单表查询是指从一张表数据中查询所需的数据,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-11-11
  • 浅谈MySQL 亿级数据分页的优化

    浅谈MySQL 亿级数据分页的优化

    mysql大数据量使用limit分页,随着页码的增大,查询效率越低下。本文就来介绍一下MySQL 亿级数据分页的优化,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • 想取消错误的mysql命令怎么办?

    想取消错误的mysql命令怎么办?

    今天小编就为大家分享一篇关于想取消错误的mysql命令怎么办?,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-04-04
  • MySQL实现数据插入操作的示例详解

    MySQL实现数据插入操作的示例详解

    使用MySQL插入数据时,可以根据需求场景选择合适的插入语句。本文通过给出每个使用场景下的实例来说明数据插入的实现过程和方法,希望对大家有所帮助
    2023-02-02
  • 在Windows环境下使用MySQL:实现自动定时备份

    在Windows环境下使用MySQL:实现自动定时备份

    下面小编就为大家分享一篇在Windows环境下使用MySQL:实现自动定时备份的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • MySQL锁情况查看命令

    MySQL锁情况查看命令

    本文主要介绍了MySQL锁情况查看命令,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • MySQL 转义字符使用说明

    MySQL 转义字符使用说明

    MySQL 转义字符,大家可以看下,方便以后使用。
    2009-10-10

最新评论