gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 03:33:45 25 4
gpt4 key购买 nike

以下两个查询是否将以相同的方式执行?
SELECT COUNT(*) from person ORDER BY last_name;

SELECT COUNT(*) from person;
无论哪种方式,它们都应显示相同的结果,所以我很好奇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已经在寻找的索引进行排序可能会导致相同的查询计划。

关于sql - 使用ORDER BY选择COUNT(*),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9070527/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com