zoukankan      html  css  js  c++  java
  • 使用show profiles分析SQL性能

    如何查看执行SQL的耗时

    使用show profiles分析sql性能。

    Show profiles是5.0.37之后添加的,要想使用此功能,要确保版本在5.0.37之后。

    查看数据库版本

    mysql> select version();

    profile默认是不打开的

    mysql> show profiles;
    Empty set (0.02 sec)

    mysql> show variables like "%pro%";
    可以看到profiling 默认是OFF的。

    开启profile,然后测试

    开启profile
    mysql> set profiling=1;

     

    判断记录是否存在的几种方法

    把数据写入到数据库的时,常常会碰到先要检测要插入的记录是否存在,然后决定是否要写入。

    最直观的办法,就是在代码里执行一次全表查询,然后根据查询结果是否为空决定下一步操作,这样显然非常耗费性能。

    下面是几种性能较好的查询方法。

    1.直接查询,全表查询在数据量比较大的情况下,性能消耗会很大

    sql语句:select count(*) from tablename;

    然后读取count(*)的值判断记录是否存在。对于这种方法性能上有些浪费,我们只是想判断记录记录是否存在,没有必要全部都查出来。

    2.sql语句:select 1 from tablename where col = col limit 1;

    然后读取语句执行所影响的行数。

    当然这里limit 1很重要。这要mysql找到一条记录后就不会在往下找了。这里执行所影响的行数不是0就是1,性能提高了不少。

    如果你用的是PDO,可以用rowCount(),很容易就都到执行所影响的行数。

    3.SELECT EXISTS(SELECT * FROM tablename WHERE col =col )

    只能判断是否存在记录,子查询中的SELECT *在执行时会被忽略掉。

    以上三种方法,在MySQL中测试,数据量一百万左右,差距不是特别大,

     

    其中,速度最快的是使用下面的格式查询,

    SELECT EXISTS(SELECT 1 FROM `tbl` WHERE `id` =11111) 

    大家在以后的查询中可以参考上面的方法。

    参考 

    查看mysql语句运行时间的2种方法

    MySQL查找SQL耗时瓶颈SHOW profiles

    mysql 判断是否存在数据的4种方法

  • 相关阅读:
    linux下区分各种SCSI磁盘类型
    Linux那些事儿之我是SCSI硬盘(3)磁盘磁盘你动起来!
    待机(STR)suspend device flow
    %pf
    ftrace misc
    reboot系统调用的时候会调用shutdown函数
    Linux进程调度
    一张图让你读懂Linux内核运行原理
    linux O1 and CFS process sched
    SQL 视图 触发器 等
  • 原文地址:https://www.cnblogs.com/binyue/p/4645278.html
Copyright © 2011-2022 走看看