`

mysql 性能分析及explain用法

 
阅读更多
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或子查询)
分享到:
评论

相关推荐

    MYSQL 性能分析器 EXPLAIN 用法实例分析

    本文实例讲述了MYSQL 性能分析器 EXPLAIN 用法。分享给大家供大家参考,具体如下: 使用方法: EXPLAIN SELECT * FROM user; 环境和数据准备 -- 查看 MySQL 版本 SELECT VERSION(); -- MySQL 提供什么存储引擎 ...

    MySQL性能分析与优化调整

    本文将深入探讨MySQL性能分析的关键技术、优化策略以及如何进行调整。 一、性能分析 1. **慢查询日志**:MySQL提供慢查询日志功能,记录执行时间超过设定阈值的SQL语句,这是识别性能瓶颈的起点。 2. **EXPLAIN...

    SQL语句性能分析之explain

    ### SQL语句性能分析之explain #### 概述 在数据库管理及开发过程中,SQL查询语句的性能优化是一项至关重要的...通过以上方法,我们可以有效地利用`EXPLAIN`来分析和优化SQL查询性能,进而提高数据库的整体运行效率。

    mysql explain用法

    Explain命令在解决数据库性能上是第一推荐使用命令,大部分的性能问题可以通过此命令来简单的解决,Explain可以用来查看SQL语句的执行效 果,可以帮助选择更好的索引和优化查询语句,写出更好的优化语句。

    MySQL性能分析show profiles详解(csdn)————程序.pdf

    本篇将深入讲解`SHOW PROFILES`的使用方法和解析结果。 首先,`SHOW PROFILES`默认是关闭的,我们需要通过设置`profiling`变量为1来开启它。可以通过以下命令查看`profiling`的状态: ```sql SHOW VARIABLES LIKE ...

    mysql性能优化教程.pdf (by caoz)

    - **实战经验**:通过具体的案例分析,我们可以学到如何在实际工作中应用MySQL性能优化策略。 - **持续改进**:随着技术的发展,MySQL的优化方法也在不断进步,需要定期回顾和更新知识。 - **文档更新**:从2011年7...

    caoz的mysql性能优化教程

    MySQL性能优化是数据库管理员和开发人员的关键技能,尤其在大数据量和高并发的业务场景下。本教程由知名IT专家caoz提供,旨在帮助你深入理解MySQL的性能调优策略,提升数据库系统的运行效率。 一、索引优化 索引是...

    高性能MySQL.pdf

    - **查询优化**:通过编写高效的SQL语句,避免全表扫描,合理使用索引,理解EXPLAIN分析结果,能显著提升查询速度。 - **存储引擎优化**:根据业务需求选择合适的存储引擎,如InnoDB支持行级锁定,适合并发操作;...

    MySQL性能优化的最佳经验

    以上是MySQL性能优化的一些基本方法,通过实践这些优化策略,可以在很大程度上提升MySQL数据库的运行效率,从而更好地支持Web应用程序的需求。当然,MySQL性能优化是一个复杂的过程,还需要结合具体的应用场景和需求...

    MySQL explain 笔记整理

    ### MySQL EXPLAIN 笔记整理 #### 一、EXPLAIN 命令简介 ...总之,`EXPLAIN` 工具是优化 MySQL 性能的强大武器,通过对执行计划的深入分析,可以有效地提升数据库查询效率,进而提高整个应用程序的性能。

    高性能MySQL

    4. **配置优化**:配置优化是提升MySQL性能的重要手段。书内详细解析了MySQL服务器的配置选项,包括内存管理、日志设置、复制参数等,并给出了针对不同工作负载的配置建议。读者将学习到如何根据业务需求调整配置,...

    mysql性能调优的方法

    使用EXPLAIN分析查询执行计划,可以了解SQL如何工作,找出潜在的性能瓶颈。 其次,索引是提升查询速度的关键。正确创建和管理索引可以显著提高数据检索速度。应为经常用于搜索的列创建索引,尤其是主键和外键。复合...

    高性能的MySQL中文版

    《高性能的MySQL中文版》这本书深入探讨了MySQL...总的来说,这本书是提升MySQL性能的宝典,无论你是初学者还是经验丰富的开发者,都能从中获益匪浅。通过阅读和实践,你将能够构建和维护更稳定、更高效的数据库系统。

    MySQL性能分析神器 Explain,你还不知道它?那你就out了

    Explain 是 MySQL 中用于分析 SQL 查询执行计划的重要工具,它能帮助我们理解数据库如何执行查询,从而优化查询性能。在数据库性能分析中,Explain 的使用是不可或缺的,特别是对于复杂的查询和大型数据集,它能揭示...

    MySQL性能调优与架构设计(中文版)

    此外,还会介绍使用EXPLAIN分析查询执行计划,找出性能瓶颈,并讲解如何利用JOIN操作和子查询的优化策略。 索引是数据库性能的关键因素。书里会详细解析B-Tree、Hash、Full-text等各种索引类型,以及何时何地使用...

    explain的用法

    它允许我们分析MySQL以及其他数据库系统如何执行SELECT语句,帮助我们理解查询的执行计划,从而找出可能的性能瓶颈并进行优化。 在MySQL中,`explain`是用来预览查询执行计划的命令。当我们想要查看SQL语句是如何...

Global site tag (gtag.js) - Google Analytics