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种方法

  • 相关阅读:
    Unique Binary Search Trees 解答
    Unique Paths II 解答
    Unique Paths 解答
    Maximum Subarray 解答
    Climbing Stairs 解答
    House Robber II 解答
    House Robber 解答
    Valid Palindrome 解答
    Container With Most Water 解答
    Remove Duplicates from Sorted List II 解答
  • 原文地址:https://www.cnblogs.com/binyue/p/4645278.html
Copyright © 2011-2022 走看看