MySQL常用关键字使用方法(随时补充)

目录

 

MySQL常用关键字

去重Distinct

排序Group By

1.默认升序排序

 2.降序排序

 约束返回结果的数量

 SELECT 的执行顺序

1. 关键字的顺序

2.SELECT 语句的执行顺序

什么情况下用 SELECT*,如何提升 SELECT 查询效率?

总结


MySQL常用关键字

下面列举一些常见的关键字使用方法,及注意事项。

去重Distinct

  • DISTINCT+列名,表示按该列去重
  • DISTINCT 需要放到所有列名的前面,否则会报错
  • DISTINCT 后面加多列,其实是对后面所有列名的组合进行去重

排序Group By

  • 排序的列名:ORDER BY 后面可以有一个或多个列名,如果是多个列名进行排序,会按照后面第一个列先进行排序,当第一列的值相同的时候,再按照第二列进行排序,以此类推。
  • 排序的顺序:ORDER BY 后面可以注明排序规则,ASC 代表递增排序,DESC 代表递减排序。如果没有注明排序规则,默认情况下是按照 ASC 递增排序。我们很容易理解 ORDER BY 对数值类型字段的排序规则,但如果排序字段类型为文本数据,就需要参考数据库的设置方式了,这样才能判断 A 是在 B 之前,还是在 B 之后。比如使用 MySQL 在创建字段的时候设置为 BINARY 属性,就代表区分大小写。
  • 非选择列排序:ORDER BY 可以使用非选择列进行排序,所以即使在 SELECT 后面没有这个列名,你同样可以放到 ORDER BY 后面进行排序。
  • ORDER BY 的位置:ORDER BY 通常位于 SELECT 语句的最后一条子句,否则会报错。

1.默认升序排序

 2.降序排序

 约束返回结果的数量

LIMIT关键字,有一点需要注意,约束返回结果的数量,在不同的 DBMS 中使用的关键字可能不同。

在 MySQL、PostgreSQL、MariaDB 和 SQLite 中使用 LIMIT 关键字,而且需要放到 SELECT 语句的最后面。如果是 SQL Server 和 Access,需要使用 TOP 关键字

 约束返回结果的数量可以减少数据表的网络传输量,也可以提升查询效率。

如果我们知道返回结果只有 1 条,就可以使用LIMIT 1,告诉 SELECT 语句只需要返回一条记录即可。这样的好处就是 SELECT 不需要扫描完整的表,只需要检索到一条符合条件的记录即可返回。

 SELECT 的执行顺序

1. 关键字的顺序


SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ...

2.SELECT 语句的执行顺序

(在 MySQL 和 Oracle 中,SELECT 执行顺序基本相同)


FROM > WHERE > GROUP BY > HAVING > SELECT的字段 > DISTINCT > ORDER BY > LIMIT

例如下面sql语句每一个步骤都会产生一个虚拟表来作为下一步的输入集合,这个过程我们是不可见的


SELECT DISTINCT player_id, player_name, count(*) as num #顺序5
FROM player JOIN team ON player.team_id = team.team_id #顺序1
WHERE height > 1.80 #顺序2
GROUP BY player.team_id #顺序3
HAVING num > 2 #顺序4
ORDER BY num DESC #顺序6
LIMIT 2 #顺序7
  1. 首先先通过 CROSS JOIN 求笛卡尔积,相当于得到虚拟表 vt(virtual table)1-1;
  2. 通过 ON 进行筛选,在虚拟表 vt1-1 的基础上进行筛选,得到虚拟表 vt1-2;
  3. 添加外部行。如果我们使用的是左连接、右链接或者全连接,就会涉及到外部行,也就是在虚拟表 vt1-2 的基础上增加外部行,得到虚拟表 vt1-3。

什么情况下用 SELECT*,如何提升 SELECT 查询效率?

SELECT*意味着全表扫描,我们知道,全表扫描意味着全量I/O会带来巨大的性能开销。真实的业务场景中,我们很少用全表数据,更多的是部分字段,就算是需要查更多的数据也是分页查询,不会查全量。所以我们尽可能在SELECT后面写选择的列名。

统计COUNT()

 InnoDB存储引擎中COUNT(*)和COUNT(1),有WHERE子句,则是对所有符合筛选条件的数据行进行统计。如果没有WHERE子句,则是对数据表的数据行数进行统计其实都是用了全表扫描

可以看到两个的执行计划都一模一样,都用到了主键索引(聚簇索引) ,都是全表扫描69行,时间复杂度都是O(n)。如果对具体的行进行查询,聚簇索引的查询效率肯定是最高的。但对于count这种不是对具体行的查询用二级索引会比较合适,二级索引包含的信息会比较少,占的空间会比较少。多个二级索引会选择key_len比较小的二级索引。 

总结

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值