一、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性能优化步骤相关推荐

  1. 层层递进!MySQL性能优化步骤演进,一顿饭的时间我就会了

    业界公认MySQL单表容量在1千万以下是最佳状态,因为这时它的BTREE索引树高在3~5之间 思考:为什么MySQL单表1千万的索引树高是3~5? 建表优化 字段设计基本原则: 1.满足需求的情况下尽 ...

  2. mysql半连接_mysql表的半连接,反连接导致的mysql性能优化剖析

    [导读] 关于Oracle的半连接,反连接,我一直认为这是一个能讲很长时间的话题,所以在我的新书<Oracle DBA工作笔记>中讲性能优化的时候,我花... 关于Oracle的半连接,反 ...

  3. MySQL性能优化速记

    MySQL性能优化速记http://www.bieryun.com/3064.html 总结自<MySQL 5.7从入门到精通(视频教学版)>刘增杰编著. 优化简介 MySQL数据库优化是 ...

  4. MySQL 性能优化技巧

    原文地址:MySQL 性能优化技巧 博客地址:www.extlight.com 一.背景 最近公司项目添加新功能,上线后发现有些功能的列表查询时间很久.原因是新功能用到旧功能的接口,而这些旧接口的 S ...

  5. MySQL性能优化点记录

    第一章 myisam,可以基于blob和text的前500字节,创建索引 myisam 支持fulltext 延迟更新索引 (delay_key_write) CREATE TABLE `table3 ...

  6. 服务器性能优化和Mysql性能优化

    服务器性能优化和Mysql性能优化 影响性能的几个因素 服务器硬件 CPU 内存 IO子系统 服务器系统 CentOS系统参数优化 sysctlconf 优化 limitconf参数优化 磁盘调度策略 ...

  7. 《MySQL性能优化和高可用架构实践》阅读总结

    文章目录 介绍 第1章 MySQL架构介绍 1.1 MySQL简介 1.2 MySQL主流的分支版本 1.3 MySQL存储引擎 1.4 MySQL逻辑架构 1.5 MySQL物理文件体系结构 第2章 ...

  8. Mysql 性能优化教程

    Mysql 性能优化教程 l  厦门游家公司(4399.com)用于员工培训和分享. l  针对用户群为已经使用过mysql环境,并有一定开发经验的工程师 l  针对高并发,海量数据的互联网环境. l ...

  9. Mysql性能优化教程

    原文: http://wenku.baidu.com/view/aa43ecc3aa00b52acfc7ca94.html?st=1 MySQL性能优化教程 目录 目录 1 背景及目标 2 Mysql ...

最新文章

  1. 【微信支付】微信端的手机网页支付 开发流程
  2. onkeyup,onkeydown和onkeypress的区别介绍
  3. bash shell命令(1)
  4. RedHat5.2下Linux Oracle 10g ASM 安装详细实录-第二篇-ASM安装
  5. windows的python切换环境_Windows下的python虚拟环境设置
  6. Crash的数字表格(HYSBZ-2154)
  7. 使用validation校验
  8. 【java学习之路】(数据结构篇)003.链表
  9. java斗地主随机发牌_使用Java实现斗地主游戏的发牌过程
  10. 射频信号采集记录回放系统
  11. MySQL的需求分析怎么写_MySQL 数据库设计 笔记与总结(1)需求分析
  12. 宋体小四在手机上是几号_word文档4号宋体 word宋体小四是几号字
  13. php eval()函数
  14. UT000010: Session is invalid
  15. mysql: [ERROR] Found option without preceding group in config file /etc/my.cnf at line 1!
  16. python学习 day51之js续集
  17. 数组的定义与使用(一)
  18. 计算机网络中请求超时是什么意思,请求超时什么意思
  19. Percona Server 安装
  20. 基于区块链技术的供应链金融平台

热门文章

  1. 文巾解题 5. 最长回文子串
  2. MATLAB基本操作(六):矩阵操作的相关函数
  3. c++图的创建_使用 Amazon Neptune 构建基于图数据库的应用
  4. Python入门100题 | 第019题
  5. 在该系统上全局禁用了虚拟打印功能,不会为该虚拟机启用此功能--解决办法
  6. vue ui 报错errno:-4058解决办法
  7. Python编程基础:第二十三节 嵌套函数调用Nested Functions Calls
  8. Python编程基础:第三节 字符串方法String Methods
  9. 【LeetCode从零单排】No14.LongestCommonPrefix
  10. 【算法数据结构Java实现】Java实现单链表