在sql中不指定Order by排序是按照主键吗
在sql中不指定Order by,排序是按照主键吗?答案是不一定。举个例子:
查询AttendanceEmpRank表,主键是AttendanceEmployeeRankId,而且是聚集索引
执行下面的语句,发现第一句不指定Order by的结果跟第二句不一样。
再看看执行计划,我们可以知道,第一句用到的是Date索引,而第二句用的是主键索引.
再看看另一组sql和查询结果:
执行计划中用到的索引也是不同的:
所以得出结论:在不指定Order by的情况下,sqlserver会根据执行计划实际查询方式来得到数据,而执行计划会根据sql中很多的因素(的查询列,where条件,order by等)而使用不同的索引,最终出来的结果很可能是不同的。
相关推荐
-
在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()
随机推荐
- AngularJS实现使用路由切换视图的方法
- js 性能优化之算法和流程控制
- VBS教程:对象-Folder 对象
- DEBUG 命令详解
- java结合HADOOP集群文件上传下载
- classloader类加载器_基于java类的加载方式详解
- Datalist控件使用存储过程来分页实现代码
- 详解Yii实现分页的两种方法
- windows系统下C++调用matlab程序的方法详解
- 深入浅析Python字符编码
- Android应用中利用ViewPager实现多页面滑动切换效果示例
- jquery实现带二级菜单的导航示例
- JavaScript中的alert()函数使用技巧详解
- Bootstrap选项卡学习笔记分享
- C语言数据结构 双向链表的建立与基本操作
- php文件管理基本功能简单操作
- 解析php中memcache的应用
- MySQL InnoDB中的锁机制深入讲解
- vue中子组件调用兄弟组件方法
- 详解使用navicat连接远程linux mysql数据库出现10061未知故障