请问sql语句怎么写才是在内存中排序啊
order by 不是在内存中排序吗
order by 不是在内存中排序吗
解决方案 »
- sqldeveloper运行时总提示 enter the full pathname for java.exe
- 请教游标处理过程中的问题-详见描述
- 请教以下语句如何改造成查询不重复记录
- Oracle EBS系统非常难的一个问题(获取销售价格)
- Oracle插入大量数据的问题
- 高难度问题,我要把oracle 8.0.4 升级到 oracle 9.2 大家给点意见(关系饭碗!急!)
- 关于存储过程
- 如何在ORACLE的SQL PLUS里执行有输入参数输出参数的存储过程?
- 这语句怎么错了?
- 问原来表已经建立好,并且表里存了一些数据,现在想改动表,添加一个字段,用什么命令?
- oracle初学者你请教
- 高分求助:如何向数据库中更快速的插入txt数据
所以我不太明白什么叫在内存中排序
order by是不是在内存中排序呢
/*+INDEX_ASC(表在SQL中的别名,索引名称)*/
反向排序为:
/*+INDEX_DESC(表在SQL中的别名,索引名称)*/如你有一张表叫test,中间有一个字段是ID,在其起初上创建了缩影:IDX_TEST_ID,你此时要按这个字段正向排序:
SELECT /*+INDEX_ASC(t,IDX_TEST_ID)*/ *
FROM TEST t
ORDER BY t.ID;而要反向排序就这样写:
SELECT /*+INDEX_DESC(t,IDX_TEST_ID)*/ *
FROM TEST t
ORDER BY t.ID;原始写法:
SELECT *
FROM TEST t
ORDER BY t.ID;对比一下执行计划看下,此时你查看执行计划和不适用的执行计划就会少一个步骤,就是SORT ORDER BY,而使用后使用:TABLE ACCESS BY ROWID2、如何尽量在内存中排序,其实不好控制,是在业务允许的情况下,是先过滤掉大部分数据,然后在这个基础上过滤,而不是先排序后在去排序(但是需要业务上允许),因为排序的数据少了,占用的空间自然就少了。
SELECT /*+INDEX_DESC(t,IDX_TEST_ID)*/ *
FROM TEST t
ORDER BY t.ID DESC;