MySQL开发与优化
- 格式:pdf
- 大小:735.20 KB
- 文档页数:43


MySQL索引优化,explain详细讲解
前⾔:这篇⽂章主要讲 explain 如何使⽤,还有 explain 各种参数概念,之后会讲优化⼀、Explain ⽤法
模拟Mysql优化器是如何执⾏SQL查询语句的,从⽽知道Mysql是如何处理你的SQL语句的。分析你的查询语句或是表结构的性能瓶颈。语法:Explain + SQL 语句;如:Explain select * from user; 会⽣成如下 SQL 分析结果,下⾯详细对每个字段进⾏详解 ⼆、id
是⼀组数字,代表多个表之间的查询顺序,或者包含⼦句查询语句中的顺序,id 总共分为三种情况,依次详解id 相同,执⾏顺序由上⾄下 id 不同,如果是⼦查询,id 号会递增,id 值越⼤优先级越⾼,越先被执⾏ id 相同和不同的情况同时存在 三、select_type
select_type 包含以下⼏种值simpleprimarysubqueryderivedunionunion resultsimple
简单的 select 查询,查询中不包含⼦查询或者 union 查询 primary
如果 SQL 语句中包含任何⼦查询,那么⼦查询的最外层会被标记为 primary subquery
在 select 或者 where ⾥包含了⼦查询,那么⼦查询就会被标记为 subQquery,同三.⼆同时出现 derived
在 from 中包含的⼦查询,会被标记为衍⽣查询,会把查询结果放到⼀个临时表中 union / union result
如果有两个 select 查询语句,他们之间⽤ union 连起来查询,那么第⼆个 select 会被标记为 union,union 的结果被标记为 union result。它的 id 是为 null 的 四、table
表⽰这⼀⾏的数据是哪张表的数据五、type
type 是代表 MySQL 使⽤了哪种索引类型,不同的索引类型的查询效率也是不⼀样的,type ⼤致有以下种类systemconsteq_refrefrangeindexall system
MySQL性能优化之参数配置
1、⽬的:
通过根据服务器⽬前状况,修改Mysql的系统参数,达到合理利⽤服务器现有资源,最⼤合理的提⾼MySQL性能。
2、服务器参数:
32G内存、4个CPU,每个CPU 8核。
3、MySQL⽬前安装状况。
MySQL⽬前安装,⽤的是MySQL默认的最⼤⽀持配置。拷贝的是f.编码已修改为UTF-8.具体修改及安装MySQL,可以参考
<>帮助⽂档。
4、修改MySQL配置
打开MySQL配置⽂件f
vi /etc/f
4.1 MySQL⾮缓存参数变量介绍及修改
4.1.1修改back_log参数值:由默认的50修改为500.(每个连接256kb,占⽤:125M)
back_log=500
back_log值指出在MySQL暂时停⽌回答新请求之前的短时间内多少个请求可以
被存在堆栈中。也就是说,如果MySql的连接数据达到max_connections时,新来
的请求将会被存在堆栈中,以等待某⼀连接释放资源,该堆栈的数量即back_log,如果等待连接的数量超过back_log,将不被授予连接资源。将会报:
unauthenticated user | xxx.xxx.xxx.xxx | NULL | Connect | NULL | login | NULL 的
待连接进程时.
back_log值不能超过TCP/IP连接的侦听队列的⼤⼩。若超过则⽆效,查看当前系
统的TCP/IP连接的侦听队列的⼤⼩命令:cat /proc/sys/net/ipv4/tcp_max_syn_backlog⽬前系统为1024。对于Linux系统推
荐设置为⼩于512的整数。
修改系统内核参数,)/html/64/n-810764.html
查看mysql 当前系统默认back_log值,命令:
show variables like 'back_log'; 查看当前数量
mysql查询时offset过⼤影响性能的原因和优化详解
前⾔
mysql查询使⽤select命令,配合limit,offset参数可以读取指定范围的记录。本⽂将介绍mysql查询时,offset过⼤影响性能的原因及优化⽅法。
准备测试数据表及数据
1.创建表
CREATE TABLE `member` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(10) NOT NULL COMMENT '姓名',
`gender` tinyint(3) unsigned NOT NULL COMMENT '性别',
PRIMARY KEY (`id`),
KEY `gender` (`gender`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2.插⼊1000000条记录
$pdo = new PDO("mysql:host=localhost;dbname=user","root",'');
for($i=0; $i<1000000; $i++){
$name = substr(md5(time().mt_rand(000,999)),0,10);
$gender = mt_rand(1,2);
$sqlstr = "insert into member(name,gender) values('".$name."','".$gender."')";
$stmt = $pdo->prepare($sqlstr);
$stmt->execute();
}
>
mysql> select count(*) from member;
+----------+
| count(*) |
+----------+
| 1000000 |
+----------+
1 row in set (0.23 sec)
3.当前数据库版本
mysql> select version();
MySQL调优参数配置
MySQL服务器硬件优化
硬盘:mysql 对磁盘的要求⽐较⾼,包括随机读写的带宽和IOPS和顺序读写的带宽和IOPS,可以通过使⽤⾼转速磁盘、商业FC存
储、固态硬盘等⽅式提⾼IOPS及读写带宽;
内存:mysql 服务器内存越⾼,可加载的热点索引数据越多,可提供给操作线程的内存越多。Mysql 读写操作越快;CPU: mysql正常的查询 对CPU要求⽐较低,如果磁盘和内存不⾜CPU配置过⾼更容易引起磁盘吞吐量下降严重导致性能过低,所以
硬件优化⾸先优化硬盘和内存,只有硬盘和内存⽆瓶颈后增加CPU才会使mysql性能更⾼如果有⼤量的慢查询则很容易将CPU跑满,
所以CPU如果过⾼应⾸先检查慢查询优化慢查询,如慢查询优化完成应⾸先检查是否由于磁盘IO过⾼引起的CPU过⾼。
内存优化-数据索引页共享内存
innodb_buffer_pool_size
1. 作⽤:pool-size可以缓存索引和⾏数据,值越⼤,IO读写就越少,如果单纯的做数据库服务,该参数可以设置
到电脑物理内存的75-80%2. 调优参考计算⽅法:
val = Innodb_buffer_pool_pages_data / Innodb_buffer_pool_pages_total * 100%
val > 95% 则考虑增⼤ innodb_buffer_pool_size, 建议使⽤物理内存的75%
val < 95% 则考虑减⼩ innodb_buffer_pool_size, 建议设置为:Innodb_buffer_pool_pages_data * Innodb_page_size *
1.05 / (102410241024)
innodb_buffer_pool_instances
1. 作⽤:innodb_buffer_pool_instances的值主要⽤于将innodb buffer pool进⾏划分,通过划分innodbbuffer pool为多个实