zoukankan      html  css  js  c++  java
  • 【MySql】性能优化之分析命令

    【MySql】性能优化之分析命令

       

    当发现程序运行比较慢的时候,首先排除物力资源问题之后,就将注意力转向mysq数据库:

    1、首先确定运行慢的sql语句:

    mysql> show full processlist;

    2、确认低效的查询: 多次执行第一步发现time耗费大的sql语句。查看耗费的时间。

    3、为sql生成一个执行计划query Execution plan(QEP)

    mysql> explain select * from tbal_name where ...;

    4、查看创建表的语句:

    show create table table_name G;

    5、查看表的状态:

    show table status like 'table_name' G;

    ---------------------------------------------------

    总结一些分析的命令:

    1、explain:解释sql的执行计划,后边的sql不执行

    2、explain partitions :用于查看存在分区的表的执行计划

    3、explain extended:--书上说存在filtered列,但是检查后没有发现这一列,待验证

    4、show warnings:

    5、show create table:查看表的详细的创建语句,便于用户对表进行优化

    6、show indexes :产看表的所有索引,show indexes from table_name,同样也可以从information_schema.statistics表中获得同样的信息。cardinality列很重要,表示数据量。

    7、show tables status: 查看数据库表的底层大小以及表结构,同样可以从information_schema.tables表中获得底层表的信息。

    8、show [global|session]status:可以查看mysql服务器当前内部状态信息。可以帮助却行mysql服务器的负载的各种指标。默认是session。同information_schema.global_status和information_schema.session_status

    9、show [global|session] variables :查看当前mysql系统变量的值,其中一些值能影响到sql语句的执行方式。同information_schema.global_variables和information_schema.session_variables;

    10、information_schema:包含的表的数量和mysql的版本有关系。

    -------------------------

    三、索引

     1、数据完整性:通过主键和唯一键来确保数据唯一性

    主键(primary key):每个表只能有一个,主键不为null,定义了auto_increment列,那么此列就必须是主键的一部分。

    唯一键(unique key):表中可以存在多个唯一键,每个key可以为null,即null!=null

    2、索引术语:

    索引技术:

    索引实现:

    索引类型:

    3、创建单列索引:这里要注意的是可以在一列上创建多个索引,但是这样会产生性能开销,

    alter table table_name add primary key|index index_name (coumn_name);

    4、当存在多个索引的时候,如何确定选择使用哪个索引更高效?

    根据索引中唯一值和索引中总行数做比较,唯一值越多,使用这个索引时以更少读得到查询结果。

    禁用优化器设置:set @@session.optimizer_switch='index_merge_intersection=off';

    5、在like查询中(%oo)不会走索引

    6、不支持函数索引。另外在索引上使用函数,执行计划也不会走索引。

    7、唯一索引:提供数据完整性,保证在列中任何值都出现一次,告知优化器,给定的记录最多只有一条结果返回,避免了额外的索引扫描,是否进行了额外的索引扫描,可以使用下边的语句查看:

    flush status;

    show session status like 'handler_read_next';

    select name from student where name='Randy';

    show session status like 'handler_read_next';

    8、对于结果的排序:如果不是根据索引字段进行排序,mysql会使用内部文件排序算法对返回额行按照指定顺序进行排序。使用索引字段进行排序的话将免去分类的过程。

    9、组合索引:索引的执行顺序是按照组合索引中每个字段的cardinality来确定使用哪个组合索引。有的时候交换一下组合索引列的顺序,执行效率会更好。主要可能组合索引的最左列。

    组合索引列不要太宽,ref表示使用了那几个组合索引字段,key_len表示索引字段的长度

    10、查询提示:

    通过查询提示来修改查询的执行计划。

    straight_join: 强制按照from后边的关联顺序去执行链接操作,不管执行计划是否是最优的。

    11、索引提示:

    索引提示都会被链接中的表来使用,为每张表定义use、ignore、force类表

    use [index|key] [for( join|order_by|group_by)] [index_list]  --让优化器倾向于使用指定的索引扫描

    ignore [index|key] [for( join|order_by|group_by)] [index_list]

    force [index|key] [for( join|order_by|group_by)] [index_list] --让优化器倾向于索引扫描而不是全表扫描

    12、索引DML操作的影响:影响写操作的性能。重复索引、

    13、通过 show index_staistics来查看索引的使用情况,来确定哪些索引没有被使用。没有被使用的索引占用空间,影响写入性能,

    14、DDL:在修改表索引的时候会锁表。会影响存储空间的大小。

    -----------------

    四、搜索引擎

    MySIAM:一种非事物行的存储引擎

    InnoDB:事务性存储引擎

    Memory:基于内存的、非事物性的以及非持久性的存储引擎

    查看表的存储引擎:

    show create table show table status information_schema.tables可以查看表的存储引擎

  • 相关阅读:
    ThinkPHP 3 的CURD管理用户信息 修改和删除
    检测一个字符串是否为一个有效的编码格式字符串
    将Buffer对象结合创建为一个新的Buffer对象
    Buffer.byteLength(字符串,编码方式)计算指定字符串的字节数
    TypeError: Buffer.allocUnsafe is not a function
    多个haproxy 之间跳转
    TypeError: Identifier 'assert' has already been declared
    14.5.7 Storing InnoDB Undo Logs in Separate Tablespaces 存储InnoDB Undo logs 到单独的表空间
    14.5.5 Creating a File-Per-Table Tablespace Outside the Data Directory
    php session 管理
  • 原文地址:https://www.cnblogs.com/wangtengfei/p/4478403.html
Copyright © 2011-2022 走看看