在sql中不指定Order by排序是按照主键吗

在sql中不指定Order by,排序是按照主键吗?答案是不一定。举个例子:

查询AttendanceEmpRank表,主键是AttendanceEmployeeRankId,而且是聚集索引

执行下面的语句,发现第一句不指定Order by的结果跟第二句不一样。

再看看执行计划,我们可以知道,第一句用到的是Date索引,而第二句用的是主键索引.

再看看另一组sql和查询结果:

执行计划中用到的索引也是不同的:

所以得出结论:在不指定Order by的情况下,sqlserver会根据执行计划实际查询方式来得到数据,而执行计划会根据sql中很多的因素(的查询列,where条件,order by等)而使用不同的索引,最终出来的结果很可能是不同的。

(0)

相关推荐

  • 在sql中不指定Order by排序是按照主键吗

    在sql中不指定Order by,排序是按照主键吗?答案是不一定.举个例子: 查询AttendanceEmpRank表,主键是AttendanceEmployeeRankId,而且是聚集索引 执行下面的语句,发现第一句不指定Order by的结果跟第二句不一样. 再看看执行计划,我们可以知道,第一句用到的是Date索引,而第二句用的是主键索引. 再看看另一组sql和查询结果: 执行计划中用到的索引也是不同的: 所以得出结论:在不指定Order by的情况下,sqlserver会根据执行计划实际查

  • 详解MySQL中Order By排序和filesort排序的原理及实现

    目录 1.Order By原理 2.filesort排序算法 3.优化排序 1.Order By原理 MySQL的Order By操作用于排序,并且会有多种不同的排序算法,他们的性能都是不一样的. 假设有一个表,建表的sql如下: CREATE TABLE `obtest` ( `id` BIGINT NOT NULL AUTO_INCREMENT, `a` VARCHAR ( 100 ) NOT NULL, `b` VARCHAR ( 100 ) NOT NULL, `c` VARCHAR (

  • Oracle数据库中ORDER BY排序和查询按IN条件的顺序输出

    ORDER BY非稳定的排序 提一个问题: oracle在order by 排序时,是稳定排序算法吗? 发现用一个type进行排序后,做分页查询,第一页的数据和第二页的数据有重复 怀疑是order by 时,两次排列的顺序不一致 看到业务描述的问题可以得到的结论order by排序不稳定,还有第一个印象就是,type肯定是不唯一的,并且没有索引吧. 这里先科普下排序的稳定性,举个最简单的例子,1,2,3,1,4,5 排序 排序的结果是1,1,2,3,4,5,这时候观察这个1,如果第一个1还是排序

  • sql中 order by 和 group by的区别

    order by 从英文里理解就是行的排序方式,默认的为升序. order by 后面必须列出排序的字段名,可以是多个字段名. group by 从英文里理解就是分组.必须有"聚合函数"来配合才能使用,使用时至少需要一个分组标志字段. 什么是"聚合函数"? 像sum().count().avg()等都是"聚合函数" 使用group by 的目的就是要将数据分类汇总. 一般如: select 单位名称,count(职工id),sum(职工工资) f

  • SQL语句实现表中字段的组合累加排序

    有表如下: id in out index 1 10 12 2 2 9 8 2 3 12 8 3 1 9 9 3 1 12 0 3 2 5 18 2 2 20 0 2 这三个字段均为integer类型 现要求如下: 1.按index=2查找 2.将所有id相同的和在一起,数据要加在一起 3.最后呈现的数据要按in+out进行排序,按由大到小 为满足以上的要求:设计的SQL语句如下(假设表名为tab) 复制代码 代码如下: select id,sum(in) as in,sum(out) as o

  • 解决mybatis中order by排序无效问题

    1.#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #{user_id},如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id". 2.$将传入的数据直接显示生成在sql中.如:order by ${user_id},如果传入的值是111,那么解析成sql时的值为order by 111, 如果传入的值是id,则解析成的sql为order b

  • 巧用Spring中的@Order进行排序

    目录 Spring @Order进行排序 Spring中关于Order的那点事 为啥要用Order 关于Order OrderComparator#compare解读 @Order与@Priority 应用 Spring @Order进行排序 直接上代码 public class OrderAnnotationTest {     public static void main(String[] args) {         A a = new A();         B b = new B

  • MySQL中order by排序语句的原理解析

    order by 是怎么工作的? 表定义 CREATE TABLE `t1` ( `id` int(11) NOT NULL, `city` varchar(16) NOT NULL, `name` varchar(16) NOT NULL, `age` int(11) NOT NULL, `addr` varchar(128) DEFAULT NULL, PRIMARY KEY (`id`), KEY `city` (`city`)) ENGINE=InnoDB; SQL语句可以这样写: se

  • java8新特性将List中按指定属性排序过滤重复数据的方法

    在java中常常会遇到这样一个问题,在实际应用中,总会碰到对List排序并过滤重复的问题,如果List中放的只是简单的String类型过滤so easy,但是实际应用中并不会这么easy,往往List中放的是一个类,类中有多个属性,要过滤重复数据,而且这个重复数据要按自己指定的属性过滤,但是要想按照其它属性排序顺序过滤,所以要先排序一下,然后按照某个属性过滤. 实体类如下所示,大家只要创建下面的实体类,无需继承父类,大家不会注解式风格的话,请自行加上getter/setter方法. 首先看看gr

  • 浅谈laravel框架sql中groupBy之后排序的问题

    最近在用框架给公司App写接口时,碰到了一个棘手的问题: 对查询结果进行排序并进行分页(进行了简略修改),下面是最终结果代码: $example = Example::select(DB::raw('max(id) as some_id,this_id')) ->where('id', $id) ->groupBy('this_id') ->orderBy('some_id', 'desc') ->skip($offset) ->take($limit) ->get()

随机推荐