mysql有没有返回上一个sql执行时间的函数??
请教大家指点下

解决方案 »

  1.   

    这个是和客户端有关系的  你如果想要这个时间就只能先select now()执行完以后在select now()
    然后两次时间相减
      

  2.   

    CREATE  PROCEDURE `testtime`()
    begin 
    DROP  TABLE IF EXISTS TEMP_COUNT;
    CREATE TABLE TEMP_COUNT(
     ID_COUNT int (10)  AUTO_INCREMENT,
     I_SEC INT (10),
     CUR_TIME DATE,
     PRIMARY KEY (ID_COUNT)
    )ENGINE=INNODB DEFAULT CHARSET=utf8;set @a=now();
    SELECT * FROM TB_COMPANY;
    SET @tmp=HOUR(timediff(now(),@a))*3600+ MINUTE(timediff(now(),@a))*60 +SECOND(timediff(now(),@a));
    INSERT into TEMP_COUNT(I_SEC) VALUES(@tmp);
    set @a=now();
    SELECT * FROM TB_COST_REVENUE;
    SET @tmp=HOUR(timediff(now(),@a))*3600+ MINUTE(timediff(now(),@a))*60 +SECOND(timediff(now(),@a));
    INSERT into TEMP_COUNT(I_SEC) VALUES(@tmp);SELECT * from TEMP_COUNT;
    end
    我写了一个简单的sp 
    这样是可以计算出一个sql的时间 
    但是如果在生产环境 数据量大 sql 多的话 就不太好用
    有没有什么好的办法统计呢 
      

  3.   

    用set profiling和show profiles吧,具体方法可以上网查下
      

  4.   

    另外一个思路,打上慢查询记录毫秒的PATCH,然后把时间调整为0.001秒,这样可能每条查询都是慢查询了,然后只需要去慢查询日志里面分析,就能看到每条SQL的执行时间。
      

  5.   


     Query Profiler 是mysql的诊断分析工具,通过该工具一条 Query 在整个执行过程中 CPU,IO这些资源的消耗情况
    比如 :
    mysql> show profile cpu,block io for query 3;
    +--------------------+----------+----------+------------+--------------+---------------+
    | Status             | Duration | CPU_user | CPU_system | Block_ops_in | Block_ops_out |
    +--------------------+----------+----------+------------+--------------+---------------+
    | starting           | 0.000552 | 0.000000 |   0.000000 |            0 |             0 |
    | Opening tables     | 0.000195 | 0.000000 |   0.000000 |            0 |             0 |
    | System lock        | 0.000068 | 0.000000 |   0.000000 |            0 |             0 |
    | Table lock         | 0.000057 | 0.000000 |   0.000000 |            0 |             0 |
    | init               | 0.000206 | 0.000000 |   0.000000 |            0 |             0 |
    | optimizing         | 0.000022 | 0.000000 |   0.000000 |            0 |             0 |
    | statistics         | 0.000101 | 0.000000 |   0.000000 |            0 |             0 |
    | preparing          | 0.000041 | 0.000000 |   0.000000 |            0 |             0 |
    | executing          | 0.000006 | 0.000000 |   0.000000 |            0 |             0 |
    | Sending data       | 0.000502 | 0.000000 |   0.000000 |            0 |             0 |
    | end                | 0.000023 | 0.000000 |   0.000000 |            0 |             0 |
    | query end          | 0.000005 | 0.000000 |   0.000000 |            0 |             0 |
    | freeing items      | 0.000077 | 0.000000 |   0.000000 |            0 |             0 |
    | logging slow query | 0.000005 | 0.000000 |   0.000000 |            0 |             0 |
    | cleaning up        | 0.000005 | 0.000000 |   0.000000 |            0 |             0 |
    +--------------------+----------+----------+------------+--------------+---------------+
    15 rows in set (0.00 sec)得不到sql的执行时间.
      

  6.   


    测试环境还可以 但是生产环境是不行的
    生产环境的所有server的slow query设置都会通过outlook发邮件 每天都有很多的DML DDL语句执行 那邮件会爆满的啊...