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

SQLは、SELECT要求ごとにROW_NUMBERとCOUNTを取得します

    これはおそらく、ページ付けを可能にするためのものです。行の総数を表示すると、非常にコストがかかる可能性があります。

    さまざまなデータベースでうまく機能することがわかった1つの方法は、作業を2つの部分に分割することです。まず、一時テーブルの関連する行のIDを収集します。次に、完全なデータセットをクエリします。最初の部分で収集されたデータは、特定のページの行の総数と行のIDを計算する簡単な方法を提供します。

    これはSQLServerの大まかな例です。この例は、row_number()のようなウィンドウ関数に依存していないことに注意してください。 、MySQLでは使用できません。

    create table #id_list (rn int identity, pk int);
    
    insert   #id_list
             (pk)
    select   customer_id
    from     customers
    where    name like '%Joe%';
    
    select   (select  count(*) from #id_list) as total_rows
    ,        rn -- The row's number
    ,        name
    ,        birth_date
    ,        ... -- Other columns
    from     #id_list id
    join     customer c
    on       c.pk = c.customer_id
    where    rn between 15 and 29; -- Second 15-row page 
    

    ちなみに、可能であれば、この要件を設計者に返して、これに多くの時間を費やす価値があるかどうかを再確認します。行の総数を表示する必要がない場合は、はるかに簡単です。



    1. ORA-02014を回避する方法:DISTINCT、GROUPBYなどのビューからFORUPDATEを選択できません

    2. データベースの検索とフィルタリング/リファインはLaravel4になります

    3. 別のテーブルのMAX行と行を結合しますか?

    4. 空間mysqlインデックスに結合します