mysql性能优化随笔
mysql性能优化是一个很大的命题,这里只记录一下近期的一些小经验。
曾经以为看了点create table时加index的语法就觉得自己知道怎么做mysql优化了,后来又看了点介绍mysql索引底层实现的文章,就感觉自己已经得到mysql精髓了一样。。
直到最近因为工作需要认真去提升大数据量下的性能的时候,才发现,自己以前简直跟从三到万里学了一二三就嚷嚷“儿得已”的三岁小儿一样的可笑。。
一、这里简单引用些资料介绍一些优化工具
神器1 https://dev.mysql.com/doc/refman/5.6/en/
官方文档手册,不需要解释。
神器2 explain
用这个看看自己的sql,经历哪些步骤,有没有使用到索引,不要想当然觉得建个索引mysql就能智能的到处使用,它有它的规则的,数据量大时有没有用到索引往往性能是天壤之别。参考资料:https://www.cnblogs.com/butterfly100/archive/2018/01/15/8287569.html
神器3 show engine innodb status\G
尤其推荐执行耗时很长的sql时看看最底下那里,mysql实际速度到底多少,它在忙哪类操作还是在发呆。。
另外可以看看buffer pool用的怎么样
神器4 show global status;
具体解释可以看这里 https://dev.mysql.com/doc/refman/5.6/en/server-status-variables.html
神器5 了解mysql buffer pool
参考这里:https://www.cnblogs.com/coderyuhui/p/6861194.html
官方文档:https://dev.mysql.com/doc/refman/5.6/en/innodb-buffer-pool.html
神器6 show full proccesslist;
查看当前正在执行的sql,也可以kill xxxx去杀掉query
二、最近使用的优化
实际操作中如何优化一定是结合业务场景来做的。例如少量写大量读的,可以用mysql一主多从、合理建索引、前面加一层redis等解决。这里只简单记录一点点
1. 合理使用索引
(1)建议使用组合索引,从explain可以看到一次子查询mysql只会选一个index使用,所以每个字段建一个索引最后也只会使用到其中一个而不是挨个去用。
(2)索引的字段不能太长,组合所有字段加起来长度在768字节以内才行,否则mysql自动取字段前xx字节
(3)把自己的sql用explain看看,确认一下mysql是怎么理解和执行的,是不是符合预期
(4)索引太多不见得好,会影响增删改的性能,以及造成数据膨胀,占用更多的磁盘空间。
2. 合理使用分区表
分区表的使用限制很多,多数情况下不推荐使用,但是刚好完全符合它的特性的时候建议果断用。用好了比自己分表要简单省事的多。
使用原则:
(1)所有查询都要指定分区字段,否则mysql就扫全表并且忽略所有索引
(2)合理的分区个数,底层是每个分区一套文件的,太多太少都不合适。当然自己分表也是一样要确定合理的分表个数。
(3)尽量应用在不需要alter table的场景里,alter table时如果分区较多,性能比普通表要慢很多。
3. 大数据量并且查询多的情况,尽量避免大数据量的join,可以加工制作宽表的方式进行优化。宽表上还可以建索引等。
4. 大批量关联update时,如果无法使用到索引,可以考虑是否方便先insert into select 然后delete老数据。当然这个办法更trick,一般场景是不建议使用的。不过trick的办法都是因地制宜想出来的,了解mysql特性并结合业务场景灵活运用就是好的设计。
mysql性能优化随笔的更多相关文章
- Mysql - 性能优化之子查询
记得在做项目的时候, 听到过一句话, 尽量不要使用子查询, 那么这一篇就来看一下, 这句话是否是正确的. 那在这之前, 需要介绍一些概念性东西和mysql对语句的大致处理. 当Mysql Server ...
- Mysql性能优化三(分表、增量备份、还原)
接上篇Mysql性能优化二 对表进行水平划分 如果一个表的记录数太多了,比如上千万条,而且需要经常检索,那么我们就有必要化整为零了.如果我拆成100个表,那么每个表只有10万条记录.当然这需要数据在逻 ...
- [MySQL性能优化系列]提高缓存命中率
1. 背景 通常情况下,能用一条sql语句完成的查询,我们尽量不用多次查询完成.因为,查询次数越多,通信开销越大.但是,分多次查询,有可能提高缓存命中率.到底使用一个复合查询还是多个独立查询,需要根据 ...
- [MySQL性能优化系列]巧用索引
1. 普通青年的索引使用方式 假设我们有一个用户表 tb_user,内容如下: name age sex jack 22 男 rose 21 女 tom 20 男 ... ... ... 执行SQL语 ...
- MySQL性能优化:索引
MySQL性能优化:索引 索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些指针排序.数据库使用索引以找到特定值,然后顺指针找到包含该值的行.这样可以使对应于表的SQL语句执 ...
- mysql 性能优化方向
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- MySQL性能优化总结
一.MySQL的主要适用场景 1.Web网站系统 2.日志记录系统 3.数据仓库系统 4.嵌入式系统 二.MySQL架构图: 三.MySQL存储引擎概述 1)MyISAM存储引擎 MyISAM存储引擎 ...
- MYSQL性能优化的最佳20+条经验
MYSQL性能优化的最佳20+条经验 2009年11月27日 陈皓 评论 148 条评论 131,702 人阅读 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数 ...
- [MySQL性能优化系列]LIMIT语句优化
1. 背景 假设有如下SQL语句: SELECT * FROM table1 LIMIT offset, rows 这是一条典型的LIMIT语句,常见的使用场景是,某些查询返回的内容特别多,而客户端处 ...
随机推荐
- Linux下MongoDB安装和配置(二)
1. 下载MongoDB 下载地址:https://www.mongodb.com/download-center/community 这里选择的是:mongodb-linux-x86_64-4.0. ...
- [Algorithm] 1290. Convert Binary Number in a Linked List to Integer
Given head which is a reference node to a singly-linked list. The value of each node in the linked l ...
- mq代替db
系统有个很严重的性能问题,法国人浪费了半年多都没有解决,他们试图从sql的角度分析哪里能有改善,大方向错了,再努力也没用. 我接手以后,也走了点弯路,一上手觉得肯定能用cache解决问题,结果cach ...
- github上计算String相似度好的项目
项目中包含了杰卡德NGram.cosin夹角.最长公共子序列.边际距离等常用的相似度算法. https://github.com/tdebatty/java-string-similarity
- sql server 下载安装标记
SQL Server 2017 的各版本和支持的功能 https://docs.microsoft.com/zh-cn/sql/sql-server/editions-and-components-o ...
- SAP PI接口(RFC类型)在函数字段修改或增加后,出现字段映射错误问题
在解决标题所言问题之前,我们先回头看看RFC和sproxy这两种接口的优缺点. 关于PI接口的实现,目前我了解到的各大国企项目像中海油.中石化.国网等,普遍实现方式是RFC和代理类sproxy这两种. ...
- Enum.GetValues(),返回System.Array的一个实例
Array enumData = Enum.GetValues(e.GetType()); Console.WriteLine("This enum has {0} members.&quo ...
- Web Api全局预防Xss攻击
本文转载自https://www.cnblogs.com/ruanyifeng/p/4739807.html.对第二种过滤方法的代码进行了一些修改和注释,记录一下免得以后忘了.已经测试过,应该可以直接 ...
- WPF MVVM框架(5)
前面几章节所讲到的内容, 基本上属于前端XAML的使用方法, 那么本章及后面的章节, 则会侧重于UI与业务分离如何分离 . UI与业务逻辑之间的互操作性,, 下面将介绍WPF中, 比较主流的MVVM框 ...
- Flask笔记:session
session与cookie: cookie是一项浏览器的技术,而不是服务器的技术,服务器端是无法直接操作cookie的,只能通过返回Response响应告诉浏览器怎么操作cookie.而sessio ...