私は、postgresデータベースからランダムなXエントリのセットをsqlalchemyを使用して取得したいと考えています。私の最初のアプローチは、私のテーブルはかなり大きいので、このランダムなデータベースエントリを取得する
random_set_of_Xrows = models.Table.query.filter(something).order_by(func.random()).limit(len(X)).all()
は、このコマンドは、約1秒を要した、と私はそれを最適化する方法を疑問に思いました。私はorder_by関数はすべての行を見る必要があると思うので、オフセットを使うと速くなるかもしれません。しかし、私は完全に行数を避ける方法を完全に見ることができませんか?ここ は使用してのアプローチは、しかし、ほとんどの時間はをrowCountを取得過ごして、より高速ではありません
rowCount = db.session.query(func.count(models.Table.id)).filter(something).scalar()
random_set_of_Xrows = models.Table.query.offset(func.floor(func.random()*rowCount)).limit(len(X)).all()
オフセットです。 これをもっと速くする方法はありますか? 歓声 カール
EDIT:それはdoesnのための下方に示唆したように、私は、ランダムな値を持つテーブルに列を追加し、
random_set_of_Xrows = models.Table.query.filter(something).order_by(models.Table.random_value).limit(len(X)).all()
ような行を抽出することに使用されるIは、オフセット部分を無視しました2つの呼び出しで同じ結果が得られる場合は、ランダムな行セットが必要です。
それは役に立ちますか? https://stackoverflow.com/questions/60805/getting-random-row-through-sqlalchemy#60815 –
これまで見てきましたが、行数を避けるという問題には実際には対応していません...可能ならばまったく... – carl
hi hiro ...申し訳ありませんが、この提案と私の最初のアプローチの違いは何ですか? – carl