志在指尖
用双手敲打未来

sql有必要学吗(sql的执行顺序)

sql有必要学吗

SQL在数据剖析中的效果就相当于电脑的键盘鼠标,虽然没有了它也能照旧运行,但对使用它的人来说灵活性却下降了许多。可以说SQL技能需求在数据剖析中是非常重要的根底。
不同数据剖析岗位对于SQL掌握程度的要求和标准是不同的。
比较常见的事务剖析师,对SQL的掌握有一定要求,不过也不必要十分通晓,只要能从数据仓库里取数、学会普通的增删减改就行了;
如果是做数据仓库的剖析师,或者说更类似于系统剖析师,那就有必要要通晓SQL了,作为吃饭的饭碗,当然不能差了;
当然还有一些数据剖析岗位,对于SQL不是有必要的,可是学会了是加分项。sql
所以还是建议学习一下。
假如你只是需求对财务,销售的数据进行剖析,需求进入isql中查询一些过错数据的话,那么学不学都能够,由于你能用的到SQL语句会很少,首要就是SELECT,稍微更多点的也就是INSERT和UPDATE了。然后依据实际情况剖析该数据是否有反常
当然,为了自己日后更好的开展,仍是主张学一点,单单SELECT的使用方法也有很多种,了解SQL能够让你日后的作业更加得心应手.

sql的执行顺序

书写次序:
select->distinct->from->join->on->where->groupby->having->orderby->limit
履行次序
from->on->join->where->groupby(开始运用select中的别名,后边的句子中都能够运用别名)->sum、count、max、avg->having->select->distinct->orderby->limit
关键词意义
from:需求从哪个数据表检索数据
join:对需求相关查询的表进行相关
相关查询时,数据库会挑选一个驱动表,然后用此表的记载去相关其他表
leftjoin一般以左表为驱动表(rightjoin一般为右表),innerjoin一般以成果集少的表为驱动表,leftjoin某些情况下会被查询优化器优化为innerjoin
驱动表挑选原则:在对终究成果集没影响的前提下,优先挑选成果集最少的那张表作为驱动表
在运用索引相关的情况下,有IndexNested-Loopjoin和BatchedKeyAccessjoin两种算法
在未运用索引相关的情况下,有SimpleNested-Loopjoin和BlockNested-Loopjoin两种算法
SimpleNested-Loopjoin(SNLJ,简略嵌套循环衔接)算法:根据on条件,从驱动表取一条数据,然后全表扫面被驱动表,将符合条件的记载放入终究成果会集。这样驱动表的每条记载都伴随着被驱动表的一次全表扫描
匹配次数:外层表行数*内层表行数
IndexNested-LoopJoin(INLJ,索引嵌套循环衔接)算法:索引嵌套循环衔接是根据索引进行衔接的算法,索引是根据内层表的,通过外层表匹配条件直接与内层表索引进行匹配,防止和内层表的每条记载进行比较,然后运用索引的查询减少了对内层表的匹配次数
匹配次数:外层表行数*内层表索引高度
BlockNested-LoopJoin(BNLJ,缓存块嵌套循环衔接)算法:缓存块嵌套循环衔接通过一次性缓存多条数据,把参加查询的列缓存到JoinBuffer里,然后拿joinbuffer里的数据批量与内层表的数据进行匹配,然后减少了内层循环的次数(遍历一次内层表就能够批量匹配一次JoinBuffer里边的外层表数据)。
当不运用IndexNested-LoopJoin的时分,默认运用BlockNested-LoopJoin
BatchedKeyAccessjoin(BKAJ)算法:和SNLJ算法相似,但用于被join表上有索引能够运用,那么在行提交给被join的表之前,对这些行依照索引字段进行排序,因而减少了随机IO,排序这才是两者最大的区别,但是假如被join的表没用索引呢?那就运用BNLJ了sql
什么是JoinBuffer?
JoinBuffer会缓存所有参加查询的列而不是只有Join的列。
能够通过调整join_buffer_size缓存巨细
join_buffer_size的默认值是256K,join_buffer_size的最大值在MySQL5.1.22版别前是4G,而之后的版别才能在64位操作系统下请求大于4G的JoinBuffer空间。
运用BlockNested-LoopJoin算法需求敞开优化器办理配置的optimizer_switch的设置block_nested_loop为on,默认为敞开。
在挑选Join算法时,会有优先级,理论上会优先判断能否运用INLJ、BNLJ:
IndexNested-LoopJoin>BlockNested-LoopJoin>SimpleNested-LoopJoin
注:能够运用explain查找驱动表,成果的第一张表即为驱动表,但履行计划在真正履行时可能发生改动
on:相关条件
where:过滤表中数据的条件
履行次序:自下而上、从右到左
注:对数据库记载生效,无法对聚合成果生效,能够过滤掉最大数量记载的条件必须写在where子句结尾,不能运用聚合函数(sum、count、max、avg)
groupby:如何将上面过滤出的数据分组
履行次序:从左往右
注:尽量在groupby之前运用where过滤,防止之后运用having过滤
avg:求平均值
having:对上面现已分组的数据进行过滤的条件
注:对聚合成果过滤,因而很耗资源,能够运用聚合函数
例:挑选计算人口数量大于100W的区域
selectregion,sum(population),sum(area)frombbcgroupbyregionhavingsum(population)>1000000,不能用where挑选超越100W的区域,因为不存在这样的一条记载
select:检查成果会集的哪个列或列的计算成果
distinct:对成果集重复值去重
orderby:依照什么样的次序来检查回来的数据
履行次序:从左到右
注:很耗资源
limit:截取出目标页数据

未经允许不得转载:IT技术网站 » sql有必要学吗(sql的执行顺序)
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载