SQL-学习笔记【优化篇】

目录

前言

参考链接

SQL水平提升

(1)select语句内部的执行顺序

(2)内连接&笛卡尔积

(3)Join Ordering

参考文章

join的分类


前言

参考链接


SQL水平提升

(1)select语句内部的执行顺序

一条完整的 SELECT 语句内部的执行顺序是这样的:

FROM 子句组装数据(包括通过 ON 进行连接);
WHERE 子句进行条件筛选;
GROUP BY 分组;
使用聚集函数进行计算;
HAVING 筛选分组;
计算所有的表达式;
SELECT 的字段;
ORDER BY 排序;
LIMIT 筛选

(2)内连接&笛卡尔积

select * from a,b where a.id = b.id .然后同事说让我写内连接,我说这就是内连接啊。结果同事说这怎么会是内连接,这是笛卡尔乘积。我当时有点惊呆了,在原来公司都是这样写啊,难道这不是内连接,后来百度一下,发现:

(1)select * from a,b 不加条件的话是笛卡尔乘积。
(2)select * from a,b where a.id = b.id 加条件相当于内连接,等价于select * from a inner join b on a.id = b.id,等价于select * from a join b on a.id = b.id

所以据说(1)这种写法并不符合规范,可能只对某些数据库管用,如sqlserver。最好写成inner join的写法。

from a join b 与 from a, b 产生的临时表结果集,都是执行笛卡尔积 即【select * from a cross join b 】两表的行乘积数。

区别:

on : 与取得结果集同步进行数据刷选及过滤。

where : 获得结果集之后,才进行数据刷选及过滤。

详情看本文章(1)select语句内部的执行顺序


(3)Join Ordering

参考文章

德国慕尼黑工业大学网址Query Optimization - Chair for Database Systems (tum.de)

查询优化即将在数据库系统中讨论,本讲座着眼于优化技术的更广泛主题。它侧重于连接排序和访问路径选择等核心问题,但概述了整个查询处理机制。讲座的主要目标是双重的:首先,学习不同的优化技术,这些技术在其他领域也相关。其次,了解查询的处理方式以及为什么查询快或慢。

Query optimization is addressed shortly in Database Systems, this lecture looks at a broader topic of optimization techniques. It concentrates on the central issues like join ordering and access path selections, but gives an overview of the whole query processing machinery. The main goals of the lecture are twofold: First, to learn different optimization techniques, which are also relevant in other areas. And second, to get an understanding how queries are processed and why queries are fast or slow.

join的分类

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值