微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sql – 使用ORDER BY选择COUNT(*)

以下两个查询是否会以相同的方式执行?

SELECT ORDER BY last_name中的SELECT COUNT(*);

从人那里选择COUNT(*);

无论哪种方式,他们应该显示相同的结果,所以我很好奇,如果ORDER BY被忽略.

我问的原因是因为我正在显示一个分页表,我将从数据库中一次获得20条记录,然后触发第二个查询来计算记录总数.我想知道我是否应该使用与第一个查询相同的标准,或者我是否应该从标准中删除所有排序?

解决方法

根据执行计划,两个查询是不同的.例如,查询
select count(*) from USER

会给我:

INDEX (FAST FULL SCAN)  3.0 3   453812  3457        1   TPMDBO  USER_PK FAST FULL SCAN  INDEX (UNIQUE)  ANALYZED

如您所见,我们点击了USER_PK,它是该表的主键.

如果我按非索引列排序:

select count(*) from USER ORDER BY FirsTNAME --No Index on FirsTNAME

我去拿:

TABLE ACCESS (FULL) 19.0    19  1124488 3457    24199   1   TPMDBO  USER    FULL    TABLE   ANALYZED    1

这意味着我们进行了全表扫描(节点成本更高)

如果我按主键(已经是索引)排序,那么Oracle足够聪明,可以使用索引来进行排序:

INDEX (FAST FULL SCAN)  3.0 3   453812  3457    13828   1   TPMDBO  USER_PK FAST FULL SCAN  INDEX (UNIQUE)  ANALYZED

这看起来与第一个执行计划非常相似.

所以,你的问题的答案绝对不是 – 它们不一样.但是,按照Oracle已经在寻求的索引进行排序可能会导致相同的查询计划.

原文地址:https://www.jb51.cc/mssql/79067.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐