sql – 如何从包含百万条记录的数据库中选择第一个“N”条记录?
我有一个填充了百万条记录的oracle数据库.我正在尝试编写一个SQL查询,该查询根据特定条件从数据库返回第一个“N”个排序记录(比如100个记录). SELECT * FROM myTable Where SIZE > 2000 ORDER BY NAME DESC 然后以编程方式选择前N个记录. 这种方法的问题是: >查询结果为五十万 我的问题是: >是否可以指定’N’ 解决方法如果您的目的是找到100个随机行并在之后对它们进行排序,那么 Lasse’s solution是正确的.如果我认为您希望按名称排序前100行而丢弃其他行,则可以构建如下查询:SELECT * FROM (SELECT * FROM myTable WHERE SIZE > 2000 ORDER BY NAME DESC) WHERE ROWNUM <= 100 优化器将理解它是一个TOP-N查询,并且能够在NAME上使用索引.它不必对整个结果集进行排序,它只会从索引的末尾开始并向后读取并在100行后停止. 您还可以向原始查询添加提示,以使优化器了解您只对第一行感兴趣.这可能会生成类似的访问路径: SELECT /*+ FIRST_ROWS*/* FROM myTable WHERE SIZE > 2000 ORDER BY NAME DESC 编辑:只是在查询中添加AND rownum< = 100将无法工作,因为Oracle rownum在排序之前被归因:这就是你必须使用子查询的原因.如果没有子查询,Oracle将选择100个随机行,然后对它们进行排序. (编辑:宣城站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- sql-server – 使用LEFT JOIN或NOT EXISTS之间的最佳实践
- 软件监控儿童上网情况 涉嫌侵犯隐私引争议
- 数据库 – 有没有办法在Oracle SQL Developer中查看关系?
- 在SQL中按键键组顺序编号行?
- sql-server – 如何获取SQL Server表中每行的实际数据大小?
- SQL * Plus不执行SQL Developer所执行的SQL脚本
- html sub标记和sup标记
- 迎5.1购微软无线光鲨2.0纪念版赠精美摄像头
- 利用ASP.NET MVC和Bootstrap快速搭建个人博客之文章打赏功能
- sql-server – 为什么LEN()函数严重低估了SQL Server 2014中