Mysql性能优化(四)--MySQL优化

Mysql 优化

一、使用索引进行优化

在mysql中,创建数据表后会生成数据文件,索引文件,后缀名为.MYI的文件就是索引文件。索引的原理就是通过空间换取时间,所以索引并不是建立的越多越好。

我们可以通过explain的结果来分析该查询语句是否使用了索引。通过查看type,extra和rows的结果是可以看出来的。

type的结果为all表示肯定没有使用索引;
extra的结果中如果是using index则表示使用了索引,如果extra的结果为空则表示没有使用索引。
rows的结果如果等于全表行数,则也表示索引没有被使用。

举例说明:
eg1、没有使用索引的结果:

在这里的结果中type是为all,表示进行的是全表扫描,rows的结果为7,涉及的行数为全表的行数;

eg2、使用了索引的结果:

创建了索引后,type的结果为ref,不再是all,表示至少使用了一个索引,rows中涉及的行数为1,而不是全表的行数;此时SQL语句的性能得到明显的提升;

二、Mysql server优化

2.1 innodb存储引擎内存进行优化;

innodb是用一块内存区做IO缓存池,该缓存池用来缓存innodb的索引块和缓存innodb的数据块;

Innodb_buffer_pool_size: 该变量决定了innodb存储引擎表数据和索引数据的最大缓存区大小,设置比较合理的话,能提高事务操作的效率;

Innodb_log_buffer_size: 该变量决定了innodb重做日志缓存的大小,对于可能产生大量更新记录的事务,增加Innodb_log_buffer_size的大小,可以避免innodb在事务提交前就执行不必要的日志写入磁盘操作。

2.2 修改并发相关的参数

A、调整max_connections,提高并发连接数;

B、调整thread_cache_size,加快连接数据库的速度,mysql会缓存一定数量的客户服务线程以备重用,通过thread_cache_size可控制mysql缓存客户服务线程的数量

C、innodb_lock_wait_timeout: 控制innodb事务等待行锁的时间,对于快速处理的sql语句,可以将行锁的等待超时时间调小,以避免事务长时间挂起,对于后台运行的批处理操作,可以让等待超时时间调大,以避免发生大的回滚操作;

三、应用程序优化

3.1、访问数据库时采用连接池
3.2、采用缓存减少对于mysql的访问
 A、避免对同一个数据库做重复检索
    在编写sql的时候,对同一个表尽可能
 B、使用查询缓存
 C、缓存参数的配置
    Query_cache_type:是否打开缓存
    Query_cache_size: 缓存使用的内存空间大小
    Query_cache_min_res_unit: 分配内存块时的最小单位大小
    Query_cache_limit:mysql能够缓存的最大结果,如果超出,则增加qcache_not_cached的值,并删除查询结果;
3.3、使用负载均衡机制

原文地址:https://www.cnblogs.com/luoman/p/12692153.html

时间: 2024-08-13 17:28:31

Mysql性能优化(四)--MySQL优化的相关文章

主从同步、读写分离、mysql性能调优(软优化)

配置mysql主从同步1 主从同步的作用:让slave身份的数据库服务器自动同步 master身份的数据库服务器上的数据. 一.主数据库服务器的配置192.168.4.121 用户授权mysql> grant replication slave on *.* to [email protected]"192.168.4.11" identified by "123456";2 启用binlog日志vim /etc/my.cnf[mysqld]server_id

MySQL优化四(优化表结构)

body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-top: 10px; padding-bottom: 10px; background-color: white; padding: 30px } body>*:first-child { margin-top: 0 !important } body>*:last-child { margin-bottom:

Yahoo 开源的 MySQL 性能分析工具(MySQL Performance Analyzer)

原文地址:https://github.com/yahoo/mysql_perf_analyzer MySQL Performance Analyzer is an open source project for MySQL performance monitoring and analysis. This repository includes two sub projects: Java web application project myperf Java web server jetty

Android性能优化(四):内存优化

1.内存的分配策略概述 程序运行时的内存分配有三种策略,分别是静态的,栈式的,和堆式的,对应的,三种存储策略使用的内存空间主要分别是静态存储区(也称方法区).堆区和栈区. 静态存储区(方法区):内存在程序编译的时候就已经分配好,这块内存在程序整个运行期间都存在.它主要存放静态数据.全局static数据和常量. 栈区:在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放.栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限. 堆区:亦称动态

Android 性能优化 四 布局优化merge标签的使用

小白:之前分享了ViewStub标签的使用,Android还有其他优化布局的方式吗? 小黑:<merge />标签用于减少View树的层次来优化Android的布局.先来用个例子演示一下: 首先主需要一个配置文件activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.andr

Yahoo的MySQL性能分析器详解

Yahoo的MySQL性能分析器详解 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 一.介绍 Yahoo于前日开源了自己的MySQL性能分析器(MySQL Performance Analyzer),源码托管在GitHub.此性能分析器使用Maven构建,需要JDK 8和Maven 3.0. 此性能分析器项目包含了两个子项目: 1)Java Web应用项目:myperf 2)Jetty Web服务器项目:jetty wrapper 虽然项目在pom

mysql 性能优化方案 (转)

网 上有不少MySQL 性能优化方案,不过,mysql的优化同sql server相比,更为麻烦与复杂,同样的设置,在不同的环境下 ,由于内存,访问量,读写频率,数据差异等等情况,可能会出现不同的结果,因此简单地根据某个给出方案来配置mysql是行不通的,最好能使用 status信息对mysql进行具体的优化. mysql> show global status; 可以列出mysql服务器运行各种状态值,另外,查询mysql服务器配置信息语句: mysql> show variables; 一

MySQL 性能优化---索引及优化

博主QQ:819594300 博客地址:http://zpf666.blog.51cto.com/ 有什么疑问的朋友可以联系博主,博主会帮你们解答,谢谢支持! 一.MySQL性能优化之-影响性能的因素 1.商业需求的影响 Myisam存储引擎内置一个计数器,count(*)时直接从计数器读取:而通过innodb存储引擎查找某个数据时,是必须扫描全表的,所以当执行对表的统计(即使用count(*)函数)时,myisam要比innodb要快的很多.所以一般在innodb上执行count(*)时一般要

MySQL性能调优与架构设计——第9章 MySQL数据库Schema设计的性能优化

MySQL性能调优与架构设计——第9章 MySQL数据库Schema设计的性能优化 前言: 很多人都认为性能是在通过编写代码(程序代码或者是数据库代码)的过程中优化出来的,其实这是一个非常大的误区.真正影响性能最大的部分是在设计中就已经产生了的,后期的优化很多时候所能够带来的改善都只是在解决前妻设计所遗留下来的一些问题而已,而且能够解决的问题通常也比较有限.本章将就如何在 MySQL 数据库 Schema 设计的时候保证尽可能的高效,尽可能减少后期的烦恼. 9.1 高效的模型设计 最规范的就一定