MySQL性能优化步骤
一、SQL语句优化
1、优化count
每次分页操作都要获取一次count(),都需要扫描大量的行(意味着需要访问大量的数据)才能获得精确的结果,因此可以增加汇总表,或者redis缓存来专门记录该表对应的记录数,这样的话,就可以很轻松的实现汇总数据的查询,而且效率很高,但是这种统计并不能保证百分之百的准确。
创建一张表用来记录日志表的总数据量:
create table log_counter(
logcount bigint not null
)
在每次插入数据之后,更新该表 :
<update id="updateLogCounter" >
update log_counter set logcount = logcount + 1
</update>
在进行分页查询时, 获取总记录数,从该表中查询既可:
<select id="countLogFromCounter" resultType="long">
select logcount from log_counter limit 1
</select>
2、优化limit
查询越靠后的页码,查询效率则越慢:
select * from operation_log 1 limit 3000000 , 10;
将上述SQL优化为 :
select * from operation_log t , (select id from operation_log order by id limit
3000000,10) b where t.id = b.id ;
3、条件查询优化
针对于条件查询,需要对查询条件,及排序字段建立索引。
create index idx_id_username_roleid on t_user(id,username,role_id);
create index idx_username_roleid on t_user(username,role_id);
create index idx_roleid on t_user(role_id);
使用explain语句查看优化效果:
可以看到无论哪种组合查询都走了索引,查询效率明显提升。
4、优化排序
在查询数据时,如果业务需求中需要我们对结果内容进行了排序处理 , 这个时候,我们还需要对排序的字段建立适当的索引, 来提高排序的效率 。
二、服务器优化
1、MySQL主从复制和读写分离
服务器主从复制是指将主数据库的DDL 和 DML 操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执行,从而使得从库和主库的数据保持同步。在Mysql主从复制的基础上,可以使用读写分离来降低单台Mysql节点的压力,从而来提高访问效率,对于读写分离的实现,可以通过Spring AOP 来进行动态的切换数据源。
2、应用服务器优化
(1)缓存:可以在业务系统中使用redis来做缓存,缓存一些基础性的数据,来降低关系型数据库的压力,提高访问效率。
(2)全文检索:如果业务系统中的数据量比较大(达到千万级别),这个时候,如果再对数据库进行查询,特别是进行分页查询,速度将变得很慢(因为在分页时首先需要count求合计数),为了提高访问效率,这个时候,可以考虑加入Solr 或者 ElasticSearch全文检索服务,来提高访问效率。
(3)非关系型数据库:也可以考虑将非核心(重要)数据,存在 MongoDB 中,这样可以提高插入以及查询的效率。
注:联合索引的结构
create index idx_id_username_roleid on t_user(id,username,role_id);
B+树排序时先比较id,再比较username,最后比较role_id.
MySQL性能优化步骤相关推荐
- 层层递进!MySQL性能优化步骤演进,一顿饭的时间我就会了
业界公认MySQL单表容量在1千万以下是最佳状态,因为这时它的BTREE索引树高在3~5之间 思考:为什么MySQL单表1千万的索引树高是3~5? 建表优化 字段设计基本原则: 1.满足需求的情况下尽 ...
- mysql半连接_mysql表的半连接,反连接导致的mysql性能优化剖析
[导读] 关于Oracle的半连接,反连接,我一直认为这是一个能讲很长时间的话题,所以在我的新书<Oracle DBA工作笔记>中讲性能优化的时候,我花... 关于Oracle的半连接,反 ...
- MySQL性能优化速记
MySQL性能优化速记http://www.bieryun.com/3064.html 总结自<MySQL 5.7从入门到精通(视频教学版)>刘增杰编著. 优化简介 MySQL数据库优化是 ...
- MySQL 性能优化技巧
原文地址:MySQL 性能优化技巧 博客地址:www.extlight.com 一.背景 最近公司项目添加新功能,上线后发现有些功能的列表查询时间很久.原因是新功能用到旧功能的接口,而这些旧接口的 S ...
- MySQL性能优化点记录
第一章 myisam,可以基于blob和text的前500字节,创建索引 myisam 支持fulltext 延迟更新索引 (delay_key_write) CREATE TABLE `table3 ...
- 服务器性能优化和Mysql性能优化
服务器性能优化和Mysql性能优化 影响性能的几个因素 服务器硬件 CPU 内存 IO子系统 服务器系统 CentOS系统参数优化 sysctlconf 优化 limitconf参数优化 磁盘调度策略 ...
- 《MySQL性能优化和高可用架构实践》阅读总结
文章目录 介绍 第1章 MySQL架构介绍 1.1 MySQL简介 1.2 MySQL主流的分支版本 1.3 MySQL存储引擎 1.4 MySQL逻辑架构 1.5 MySQL物理文件体系结构 第2章 ...
- Mysql 性能优化教程
Mysql 性能优化教程 l 厦门游家公司(4399.com)用于员工培训和分享. l 针对用户群为已经使用过mysql环境,并有一定开发经验的工程师 l 针对高并发,海量数据的互联网环境. l ...
- Mysql性能优化教程
原文: http://wenku.baidu.com/view/aa43ecc3aa00b52acfc7ca94.html?st=1 MySQL性能优化教程 目录 目录 1 背景及目标 2 Mysql ...
最新文章
- 【微信支付】微信端的手机网页支付 开发流程
- onkeyup,onkeydown和onkeypress的区别介绍
- bash shell命令(1)
- RedHat5.2下Linux Oracle 10g ASM 安装详细实录-第二篇-ASM安装
- windows的python切换环境_Windows下的python虚拟环境设置
- Crash的数字表格(HYSBZ-2154)
- 使用validation校验
- 【java学习之路】(数据结构篇)003.链表
- java斗地主随机发牌_使用Java实现斗地主游戏的发牌过程
- 射频信号采集记录回放系统
- MySQL的需求分析怎么写_MySQL 数据库设计 笔记与总结(1)需求分析
- 宋体小四在手机上是几号_word文档4号宋体 word宋体小四是几号字
- php eval()函数
- UT000010: Session is invalid
- mysql: [ERROR] Found option without preceding group in config file /etc/my.cnf at line 1!
- python学习 day51之js续集
- 数组的定义与使用(一)
- 计算机网络中请求超时是什么意思,请求超时什么意思
- Percona Server 安装
- 基于区块链技术的供应链金融平台
热门文章
- 文巾解题 5. 最长回文子串
- MATLAB基本操作(六):矩阵操作的相关函数
- c++图的创建_使用 Amazon Neptune 构建基于图数据库的应用
- Python入门100题 | 第019题
- 在该系统上全局禁用了虚拟打印功能,不会为该虚拟机启用此功能--解决办法
- vue ui 报错errno:-4058解决办法
- Python编程基础:第二十三节 嵌套函数调用Nested Functions Calls
- Python编程基础:第三节 字符串方法String Methods
- 【LeetCode从零单排】No14.LongestCommonPrefix
- 【算法数据结构Java实现】Java实现单链表