小编Bre*_*rom的帖子

大数据集的分页

我有一个返回大(10000+行)数据集的查询.我想按日期desc订购,并显示前40个结果.有没有办法运行这样的查询,只检索那40个结果而不首先检索所有10000?

我有这样的事情:

select rownum, date, * from table
order by date desc
Run Code Online (Sandbox Code Playgroud)

这将选择所有数据并按日期对其进行排序,但是rownum不按顺序排列,因此仅选择前40个是无用的.

ROW_NUMBER() over (ORDER BY date desc) AS rowNumber
Run Code Online (Sandbox Code Playgroud)

^将按顺序显示rownumber,但我不能在where子句中使用它,因为它是一个窗口函数.我可以运行这个:

select * from (select ROW_NUMBER() over (ORDER BY date desc) AS rowNumber,
 rownum, * from table
order by date desc) where rowNumber between pageStart and pageEnd
Run Code Online (Sandbox Code Playgroud)

但这是选择所有10000行.我怎样才能有效地做到这一点?

sql oracle pagination

1
推荐指数
1
解决办法
517
查看次数

为什么用stringbuilder连接字符串需要花费更长的时间?

我在工作中的一些代码中找到了一个部分,其中使用这种格式创建了一堆长字符串:

String s = "" +
    "...\n" +
    "...\n" +
Run Code Online (Sandbox Code Playgroud)

出于好奇,决定快速测试一下StringBuilder是否会产生明显的变化。

public class TestStringConcat {

    public static void main(String[] args) {
        int arraySize = 1000000;
        String[] strings1 = new String[arraySize];
        String[] strings2 = new String[arraySize];

        System.out.println("Testing concat version");

        long startTime = System.currentTimeMillis();
        for (int i = 0; i < arraySize; i++) {
            strings1[i] = "" +
                "A big long multiline string"; //35 lines of string omitted 
        }

        long endTime = System.currentTimeMillis();
        System.out.println("Time to concat strings: " + (endTime - startTime)); …
Run Code Online (Sandbox Code Playgroud)

java stringbuilder

0
推荐指数
1
解决办法
52
查看次数

标签 统计

java ×1

oracle ×1

pagination ×1

sql ×1

stringbuilder ×1