sql >> データベース >  >> RDS >> PostgreSQL

postgres付きのカーソル、保存されているデータはどこにあり、DBへの呼び出しの数

    カーソルのデータセットは、最初のFETCHの実行時にサーバーによって準備されます。クライアントアプリケーションは、後続のFETCHステートメントの結果のみを受け取ります。

    サーバーがインデックスを使用してカーソルを維持できない場合は、一時データセットが作成されます。この簡単なテストを実行できます:

    create table test(i int, v text);
    insert into test
    select i, i::text
    from generate_series(1, 5000000) i;
    

    このスクリプトのステートメントを1つずつ実行します。

    begin;
    
    declare cur cursor 
    for select * from test
    order by random();             -- 17 ms
    
    fetch next cur;                -- 37294 ms (*)
    
    fetch next cur;                -- 0 ms
    fetch prior cur;               -- 0 ms
    fetch absolute 1000000 cur;    -- 181 ms
    fetch relative 1000000 cur;    -- 163 ms
    fetch first cur;               -- 0 ms
    fetch last cur;                -- 0 ms
    
    rollback;
    

    最初のFETCH(*)は、同様の一時テーブルの作成とほぼ同時に実行されます。

    create temp table temp_test as
    select * from test
    order by random();             -- 51684 ms
    

    一部のドライバーは、クライアント側に独自のカーソルの実装を持っている場合があります。これは、ドライバーのドキュメントに明示的に記載されている必要があります。




    1. RailsHerokuアプリのエラー

    2. T-SQLとSQL

    3. postgresからmysqlに移行すると、奇妙なエラーが発生しますMysql2 ::Error:MySQLサーバーがなくなりました

    4. SQL ServerのSYSNAMEデータ型とは何ですか?