zoukankan      html  css  js  c++  java
  • mysql 优化

    查看mysql状态的统计参数

    show global status like 'Com_%';

    Com_select:执行select操作的次数,一次查询累加1

    Com_insert:执行insert操作的测试,对于批量查询的insert操作,只累加一次

    Com_update:执行update操作的次数

    Com_delete:执行delete操作的次数。

    上面这些参数对所有存储引擎的表操作都会进行累计,下面这几个参数针对innodb存储引擎,累加算法也不同

    Innodb_rows_read:select查询返回的行数。

    Innodb_rows_inserted:执行insert操作插入的行数

    Innodb_rows_updated:执行update操作更新的行数

    Innodb_rows_deleted:执行delete操作删除的行数。

    通过上面这些参数了解当前数据库的应用是一插入更新为主还是查询为主,以及各种类型的sql大致执行比例是多少。对于更新操作的次数,是对执行次数的计数,不论提交还是回滚都会进行累加

    explain解释

    select_type:表示select的类型,常见取值有

    simple:简单表,即不是有表连接或者子查询

    primary:主查询,即外层的查询

    union:union中的第二个或者后面的查询语句

    subquery:子查询中的第一个select等

    table:输出结果集的表

    type:表示表的连接类型,性能有好到差的连接类型为system、const、eq_ref、ref、ref_or_null、index_merge、unique_subquery、index_subquery、range、index

    system:表中仅有一行,即常量表

    const:单表中最多有一个匹配行,例如primary key 或 unique index

    eq_ref:对于前面的每一行,在此表中只查询一条记录,简单来说,就是多表连接中使用primary key 或 unique index

    ref:有eq_ref类似,区别在于不使用primary key或unique index 而是普通的索引

    ref_or_null:与ref类似,区别在于调节中包含对null的查询

    index_merge:索引合并优化

    unique_subquery:in的后面是一个查询主键字段的子查询

    index_subquery:与unique_subquery类似,区别在于in后面查询时非谓语字段的子查询

    range:单表中的范围查询

    index:对于前面的每一行,都通过查询索引来得到数据

    all:对前面的每一行,都通过全表扫描来得到数据

    possible_keys:表示查询时,可能使用的索引

    key:表示实际使用的索引

    key_len:索引字段的长度

    rows:扫描行的数量

    Extra:执行情况的说明和描述

    在mysql中,下列情况有可能用到索引

    1、对应创建的多列索引,只要查询的条件中用到了最左边的列,索引一般就会被使用

    2、对于使用like的查询,后面如果是常量并且只要%号不在第一个字符,索引才可能会被使用

    3、如果对大的文本进行搜索,使用权威索引二不使用like '%..%'

    4、如果列名是索引,使用column_name is null将使用索引。

    存在索引单不使用索引

    1、如果mysql估计使用索引比全表扫描更慢,则不使用索引。例如如果列均匀分布在1和100之间

    2、使用memory/heap表并且where条件中不使用"="进行索引列,那么不好用到索引,heap表只有在"="的条件下才会使用索引。

    3、用or分割开的条件,如果or前的条件中的列有索引,而后面的列没有索引,那么涉及的索引都不会被用到。

    4、多列索引中,如果列不是索引的第一部分

    5、如果like是以%开始

    6、如果列类型是字符串,那么一定记得在where条件中把字符常量值用引号引起来,否则的火即便这个列上有索引,mysql也不会用到的,因为mysql默认吧输入的常量值进行转换后才进行检索。

    查看索引使用情况

    如果索引正在工作,Handle_read_key的值将很高,这个值代表了一个行被索引值读取的次数,很低的值表明增加索引得到的性能改善不高,因为索引并不经常使用。

    Handle_read_rnd_next的值很高意味着查询运行低效,并且应该建立索引补救。这个值的含义是在数据文件中读下一行的请求数。如果正进行大量的表扫描,Handler_read_rnd_next的值较高,则通常说明表索引不正确或者写入的查询没有利用索引。

  • 相关阅读:
    Centos 安装Apache软件
    简单工厂模式和策略模式的差别
    ASCII对比表
    谋哥:这个时代没有比程序猿更适合创业
    Android 自己主动化測试(3)<monkeyrunner> 依据ID查找对象&touch&type (python)
    Java学习笔记七(目录操作)
    我读经典(7):读《程序猿生存定律》有感
    SELECT语句逻辑运行顺序,你知道吗?
    Qt Creator新安装后运行一个程序后,出现错误:Error while building/deploying project dict-qt (kit: Desktop Qt 5.10.0 MinGW 32bit) When executing step "qmake"
    软件的各版本分类介绍
  • 原文地址:https://www.cnblogs.com/chrdai/p/6739599.html
Copyright © 2011-2022 走看看