慢SQL治理总结

61 阅读1分钟

前提:本篇文章中的慢SQL评判标准有两个 (1)每天出现10次且>200ms的SQL (2)>1S的SQL

分析SQL语句

Q1: permission表中id是主键,请分析是否会全表扫描?

SELECT * FROM `permission` WHERE `resource_id` = ' 323346475' ORDER BY `id` DESC LIMIT 0, 15

A1: 是否全表扫描,主要取决于resource_id这个字段是否有索引.如果有索引,会使用resource_id来查找满足条件的行,在根据id排序。

Q2: permission表中id是主键,请分析是否会全表扫描?

SELECT * FROM `permission` WHERE `resource_id` = ' 323346475' ORDER BY `id` DESC LIMIT 0, 15

A2: 是否全表扫描,主要取决于resource_id这个字段是否有索引.如果有索引,会使用resource_id来查找满足条件的行,在根据id排序。

Q2: 已知有一个6亿的表a,一个3亿的表b,表b的主键id外联表a的tid,请给出SQL语句,最快地查询出满足条件的第50000到第50200中的这200条数据记录? (1)如果

SELECT a.*, b.* FROM (  
  SELECT id FROM tableB ORDER BY id LIMIT 50000, 200
) AS b 
JOIN tableA a ON b.id = a.tid;

A2: 是否全表扫描,主要取决于resource_id这个字段是否有索引.如果有索引,会使用resource_id来查找满足条件的行,在根据id排序。