如何提高SQL查询效率?
文章来源:一个数据人的自留地
作者:鲸歌 “数据人创作者联盟”成员
预计阅读时间:15分钟
01
背景信息
-
工具:mysql数据库+navicat数据库管理客户端;
-
数据库&报表:School数据库,包含4张报表分别是student、score、course和teacher
-
报表明细信息:别看表格很小,其实能量巨大,真实业务场景会涉及更多报表以及海量数据,两者本质一样,区别在于数据量的多寡。倘若能够把4张报表实操顺溜,那么日后遇到巨量数据也不怕不怕啦~
02
阅读指南
-
日常Sql解决业务问题的步骤:翻译成大白话→写出分析思路→写出对应sql语句;
-
字符串模糊查询:like + % + _ 组合,%表示任意字符串,_特定单一字符串,%和_使用位置根据问题的要求而定;
-
Count()函数:与计数相关,常与distinct联用,以区分是否剔除重复值;
-
As:为表格原始字段或表名设置简单别名,方便书写
-
Sql语句执行顺序:from子句→where子句→select子句;
在业务场景中,简单查询适用于提取临时数据,比如活动中某一时刻的订单数量、赠品数量和下单用户量等,在分析问题时也可以基于某个分论点快速提取相关数据进行验证。
-
聚合函数有:count()、sum()、avg()、sum()、Max()、Min();
-
Group by 分组:分组后跟的列名与select后保持一致,分组可有多个列名,但多个列名保持1对1关系,避免因关系紊乱而报错;
-
Where子句与having子句区别:having后可跟聚合函数,where不可以,having位置跟在group by后;
-
Order by 排序:desc降序、asc升序,默认asc可省略,多个列名同一排序规则可只写一个desc/asc,不同列名不同排序需对应指明;
-
子查询:判断是否需要子查询和需要哪种类型,普通子查询(返回多行结果)、标量子查询(返回单行单列)和关系子查询(每组之间进行比较);
-
Sql语句书写顺序:先写子查询,再把子查询嵌套主查询中,若有多层嵌套,注意嵌套顺序,如上题子查询中还有子查询;
-
Sql运行顺序:先运行子查询,其次运行from、where、group by 和having,再select,最后是order by和limit子句;
-
Order by 排序:分辨升序和降序的区别,asc是数字由小到大,desc是数字由大到小;
-
Limit 提取特定行数:limit n = limit 0,n,比如limit 5 是提取前5行,limit 2,3是从第3行开始提取3行(包括第3行);
-
Union all:表的加法,区别于union,union all允许重复值存在;
那么,在提高SQL查询的效率上,我们需要知晓哪些呢?
扫描下方二维码,注册成为九枝兰用户「预约产品演示」
更多详情,可扫描下方二维码,添加九枝兰-阿潘进行咨询