sql – 使用ORDER BY选择COUNT(*)
发布时间:2020-12-12 06:25:36 所属栏目:MsSql教程 来源:网络整理
导读:以下两个查询是否会以相同的方式执行? SELECT ORDER BY last_name中的SELECT COUNT(*); 和 从人那里选择COUNT(*); 无论哪种方式,他们应该显示相同的结果,所以我很好奇,如果ORDER BY被忽略. 我问的原因是因为我正在显示一个分页表,我将从数据库中一次获得20条
以下两个查询是否会以相同的方式执行?
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已经在寻求的索引进行排序可能会导致相同的查询计划. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |