使用rownum进行排序的时候是先对结果集加入伪劣rownum然后再进行排序,而row_number()在包含排序从句后是先排序再计算行号码。
今天遇到一个oracle 优化问题,因为是数据库是接近2百万的数据,查询出来会比较慢,最后查看了一下是对应的分页问题:
使用rownumer解决,而不是伪劣,区别在哪里呢?
使用rownum进行排序的时候是先对结果集加入伪劣rownum然后再进行排序,而row_number()在包含排序从句后是先排序再计算行号码。
SELECT * FROM ( SELECT /*+ INDEX_ASC(t index_on_column) NOPARALLEL_INDEX(t index_on_column) */ t.*, ROWNUM AS rn FROM table t ORDER BY column ) WHERE rn >= :start AND rownum <= :end - :start + 1
结果换成row_number 竟然好了,真是奇怪了,
https://www.codingdict.com/questions/215818
推荐阅读:
https://www.cnblogs.com/tyyking/p/10664944.html
https://blog.csdn.net/weixin_31942999/article/details/116368455
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69949806/viewspace-2908103/ ,如需转载,请注明出处,否则将追究法律责任。