工作中要优化sql语句,故需要检测下执行之间,判断哪些地方时间较长

用到profile分析sql性能

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

1.查看数据库版本

select version();

955c7afde92d0553b8be4266eb2300fe.png

2.查看是否打开了profiles功能,默认是关闭的

show profiles;

29cf17182d2ab9eaaad61067e15187c0.png

如果显示为空,说明profiles功能是关闭的。下面开启

set profiling=1;

执行下面的查询

SELECT

l.id lock_id,

l.lock_kind,

l.lock_no,

l.node_id,

l.power,

l.comu_status,

li.region_code,

li.address,

li.house_id,

li.house_code,

li.room_code,

li.install_time,

li. STATUS,

l.op_no,

li.curr_owner_id,

ul.remark_name,

n.node_no,

n.comu_status node_comu_status

FROM

om_lock_install_info li

JOIN ha_lock l ON l.id=li.lock_id

LEFT JOIN lm_user_lock ul ON l.id=ul.lock_id

LEFT JOIN ha_node n ON l.node_id=n.id

WHERE

(

ul.auth_time_start IS NULL

OR ul.auth_time_start<=now()

)

AND (

ul.auth_time_end IS NULL

OR ul.auth_time_end>now()

)

AND ul.to_user_id= '151988dd6c3001'AND l.lock_kind!= '2'AND (

l.lock_kind= '0'OR l.lock_kind= '3')

AND l.power> 40AND l.power<= 100AND li.address LIKE'%测试%'AND l.lock_no LIKE'%2%'AND li.house_code LIKE'%B%'AND li.room_code LIKE'%0%'AND (

l.power<= 40OR (

(

l.comu_status= '01'OR n.comu_status= '01'AND (

l.lock_kind= '0'OR l.lock_kind= '3')

)

OR (

(

l.comu_status= '01'OR l.comu_status IS NULL

)

AND l.lock_kind= '1')

)

)

AND l.node_id= '1550120f2e3001'ORDER BY

li.room_code DESC

LIMIT1824,96

然后执行show profiles

show profiles;

29bbc080a8d0236606b0ea9816501927.png

可以看到执行时间为0.120....,query_id为108

3.根据query_id 查看某个查询的详细时间耗费

show profile for query 108;

00b5b5ed19c6a54afcc4675c67a0c134.png

查看cpu,io等信息

show profile block io,cpu for QUERY 108;

ebb84b312dad5e7f3ac95c52af0ee7de.png

另外还可以看到memory,swaps,context switches,source 等信息

Logo

永洪科技,致力于打造全球领先的数据技术厂商,具备从数据应用方案咨询、BI、AIGC智能分析、数字孪生、数据资产、数据治理、数据实施的端到端大数据价值服务能力。

更多推荐