1 使用explain语句去查看分析结果,如

explain select * from test1 where id=1;

会出现:

id  selecttype

table  type possible_keys  key

key_len  ref rows  extra各列

其中,

type=const表示通过索引一次就找到了,

key=primary的话,表示使用了主键

type=all,表示为全表扫描,

key=null表示没用到索引;

type=ref,因为这时认为是多个匹配行,在联合查询中,一般为REF

2 MYSQL中的组合索引

假设表有id,key1,key2,key3,把三者形成一个组合索引,则

如:

where key1=....

where key1=1 and key2=2

where key1=3 and key3=3 and

key2=2

根据最左原则,这些都是可以使用索引的哦

from test where key1=1 order

by key3

用explain分析的话,只用到了normal_key索引,但只对where子句起作用,而后面的order by需要排序

3 使用慢查询分析:

在my.ini中:

long_query_time=1

log-slow-queries=d:\mysql5\logs\mysqlslow.log

把超过1秒的记录在慢查询日志中

可以用mysqlsla来分析之。也可以在mysqlreport中,有如

DMS 分别分析了select ,update,insert,delete,replace等所占的百份比

4 MYISAM和INNODB的锁定

myisam中,注意是表锁来的,比如在多个UPDATE操作后,再SELECT时,会发现SELECT操作被锁定了,必须等所有UPDATE操作完毕后,再能SELECT

innodb的话则不同了,用的是行锁,不存在上面问题。

5 MYSQL的事务配置项

innodb_flush_log_at_trx_commit=1

表示事务提交时立即把事务日志写入磁盘,同时数据和索引也更新

innodb_flush_log_at_trx_commit=0

事务提交时,不立即把事务日志写入磁盘,每隔1秒写一次

innodb_flush_log_at_trx_commit=2

事务提交时,立即写入磁盘文件(这里只是写入到内核缓冲区,但不立即刷新到磁盘,而是每隔1秒刷新到盘,同时更新数据和索引

explain用法

EXPLAIN tbl_name

或:

EXPLAIN [EXTENDED] SELECT select_options

前者可以得出一个表的字段结构等等,后者主要是给出相关的一些索引信息,而今天要讲述的重点是后者。

举例

mysql> explain select * from event;

+—-+————-+——-+——+—————+——+———+——+——+——-+

| id | select_type | table | type | possible_keys | key | key_len |

ref | rows | Extra |

+—-+————-+——-+——+—————+——+———+——+——+——-+

| 1 | SIMPLE | event | ALL | NULL | NULL | NULL | NULL | 13 |

|

+—-+————-+——-+——+—————+——+———+——+——+——-+

1 row in set (0.00 sec)

各个属性的含义

id

select查询的序列号

select_type

select查询的类型,主要是区别普通查询和联合查询、子查询之类的复杂查询。

table

输出的行所引用的表。

type

联合查询所使用的类型。

type显示的是访问类型,是较为重要的一个指标,结果值从好到坏依次是:

system > const > eq_ref

> ref > fulltext >

ref_or_null > index_merge >

unique_subquery > index_subquery >

range > index > ALL

一般来说,得保证查询至少达到range级别,最好能达到ref。

possible_keys

指出MySQL能使用哪个索引在该表中找到行。如果是空的,没有相关的索引。这时要提高性能,可通过检验WHERE子句,看是否引用某些字段,或者检查字段不是适合索引。

key

显示MySQL实际决定使用的键。如果没有索引被选择,键是NULL。

key_len

显示MySQL决定使用的键长度。如果键是NULL,长度就是NULL。文档提示特别注意这个值可以得出一个多重主键里mysql实际使用了哪一部分。

ref

显示哪个字段或常数与key一起被使用。

rows

这个数表示mysql要遍历多少数据才能找到,在innodb上是不准确的。

Extra

如果是Only index,这意味着信息只用索引树中的信息检索出的,这比扫描整个表要快。

如果是where used,就是使用上了where限制。

如果是impossible where 表示用不着where,一般就是没查出来啥。

如果此信息显示Using filesort或者Using temporary的话会很吃力,WHERE和ORDER

BY的索引经常无法兼顾,如果按照WHERE来确定索引,那么在ORDER BY时,就必然会引起Using

filesort,这就要看是先过滤再排序划算,还是先排序再过滤划算。

常见的一些名词解释

Using filesort

MySQL需要额外的一次传递,以找出如何按排序顺序检索行。

Using index

从只使用索引树中的信息而不需要进一步搜索读取实际的行来检索表中的列信息。

Using temporary

为了解决查询,MySQL需要创建一个临时表来容纳结果。

ref

对于每个来自于前面的表的行组合,所有有匹配索引值的行将从这张表中读取

ALL

完全没有索引的情况,性能非常地差劲。

index

与ALL相同,除了只有索引树被扫描。这通常比ALL快,因为索引文件通常比数据文件小。

SIMPLE

简单SELECT(不使用UNION或子查询)

explain mysql 调优_explain mysql性能优化相关推荐

  1. mysql优化零基础_MySQL8数据库 | MySQL调优|MySQL底层原理|MySQL零基础新手教程

    MySQL8数据库安装 一.Windows 环境下安装 Select Operating System: Microsoft Windows B.解压并配置MySQL环境变量 MYSQL_HOME: ...

  2. 《Java性能调优实战》笔记(一)Java编程性能调优、多线程性能优化

    文章目录 一.Java性能调优概述 1.1 性能调优标准 1.2 制定性能调优策略 二.Java编程性能调优 2.1 字符串 2.2 正则表达式 2.3 ArrayList和LinkedList的选择 ...

  3. java jvm性能调优_java jvm性能优化

    摘要: 堆大小设置 年轻代的设置很关键 JVM中最大堆大小有三方面限制:相关操作系统的数据模型(32-bit 还是64-bit)限制:系统的可用虚拟内存限制:系统的可用物理内存限制.32位系统下,一般 ...

  4. apache php 调优_Apache的性能优化实例(一)

    本文主要和大家分享Apache的性能优化(一),希望能帮助到大家. Apache缺省的最大用户数是256个:这个配置对于服务器内存还是256M左右的时代是一个非常好的缺省设置,但随着内存成本的急剧下降 ...

  5. Java编程性能调优-01|字符串性能优化不容小觑,百M内存轻松存储几十G数据

    一.字符串性能优化不容小觑,百M内存轻松存储几十G数据 一.String 对象是如何实现的? String str1= "abc"; String str2= new String ...

  6. apache php 调优_Apache的性能优化(二)

    具体模块定制: 编译和包含是两个不同的概念.编译是指这个模块被编译了,要想使用它,只用简单的修改httpd.conf加上LoadModule xxx_module libexec/mod_xxx.so ...

  7. mysql 查询设置调优_MySQl 查询性能优化相关

    0. 1.参考 缓存一切数据,读取内存而不是硬盘IO 如果你的服务器默认情况下没有使用MySQL查询缓存,那么你应该开启缓存.开启缓存意味着MySQL 会把所有的语句和语句执行的结果保存下来,如果随后 ...

  8. apache php 调优_LAMP服务器性能优化技巧之加速PHP

    Apache服务器优化.PHP优化.Mysql优化 1.使用eaccelerator 我们上面的介绍Apache服务器的优化,如果您曾经浏览过 PHP 的网页时,或许会发现:怎么 PHP 的速度慢慢的 ...

  9. linux sql server调优,SQL SERVER性能优化(转)

    [IT168技术文档] 1. 用程序中,保证在实现功能的基础上,尽量减少对数据库的访问次数:通过搜索参数,尽量减少对表的访问行数,最小化结果集,从而减轻网络负担:能够分开的操作尽量分开处理,提高每次的 ...

最新文章

  1. 魔性“合成大西瓜”背后,我用 350 行代码解开了碰撞之谜!
  2. Hibernate总结2 API和配置文件
  3. numpy 学习笔记
  4. 每日一皮:我一般不担心警告,只担心错误...
  5. [INS-32025] 所选安装与指定 Oracle 主目录中已安装的软件冲突
  6. View-屏幕坐标 Content-网页(内容)坐标 mScrollX和mScrollY-屏幕坐标偏移
  7. FTP服务器配置部分
  8. mysql汉字格式_mysql 中的varchar255 uft-8 的格式到底能放多少汉字
  9. JSK-58 合法回文【字符串】
  10. 把字符串复制到剪贴板
  11. 更改计算机睡眠时间注册表,如何通过修改注册表开启/关闭系统休眠?
  12. 雅虎团队经验:网站页面性能优化的 34条
  13. Windows下安装神通数据库
  14. SpringBoot+vue项目实战(一)
  15. websocket ping pong
  16. 《计算机工程》投稿过程
  17. 新手小白学吉他,如何掌握基础快速入门
  18. 【《Real-Time Rendering 3rd》 提炼总结】(三) 第三章 · GPU渲染管线与可编程着色器 The Graphics Processing Unit
  19. 个人所得税的计算表格
  20. 国家开放大学2021春2623中医药学概论题目

热门文章

  1. golang 中的 init 和 main函数
  2. python3 字符串、十六进制字符串、数字、字节之间的转换
  3. Docker的镜像导出与导入与拷贝
  4. Docker Dockerfile 定制镜像
  5. 重定位(搜索KERNEL32.DLL得到API地址)
  6. 深入解剖unsigned int 和 int
  7. Linux Shell脚本攻略学习总结:一
  8. Android中的线程处理
  9. Android开发--XML文件解析
  10. DevicePass-through及网卡的直接分配在Xen里面的实现