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

データベースからサンプル行を1つずつ返す方法

    order by by順の式にインデックスが付けられていない場合は、特にコストがかかります。だから注文しないでください。代わりに、count()でランダムオフセットを実行します クエリと同じですが、一度にすべて実行してください。

    with t as (
        select *
        from
            products p
            inner join
            images i using (productid)
        where
            prodtype = $sometype
    )
    select *
    from t
    offset floor(random() * (select count(*) from t))
    limit 1
    

    このバージョンの方が速いかもしれません

    with t as (
        select *, count(*) over() total
        from
            products p
            inner join
            images i using (productid)
        where
            prodtype = $sometype
    )
    select *
    from t
    offset floor(random() * (select total from t limit 1))
    limit 1
    


    1. SELECTとしてのCREATETABLE-MEMORYENGINEを使用(RAMメモリ内)

    2. MySQL乗算サブクエリ結果

    3. 私にmysqlを書き込むための難しいクエリ?

    4. SQLServerレプリケーションのセットアップと構成