私はGoコードでクエリを実行するためにsqlxを使用しています。クエリには、WHERE IN(?)句でフィルタリングする必要がある値の長いリスト(〜10,000)があります。これにより、パフォーマンスが大幅に低下します。どのようにしてそのようなクエリを最適化できますか?また、このクエリはRedshiftクラスタで実行されているため、クエリのパフォーマンスを向上させるために列のインデックスを作成する方法はありません。Sqlx長いリストを含むクエリ
values := []int64{143, 123, 123, 542....} // ~10,000 elements
query, args, err := sqlx.In(query, values)
if err != nil {
return nil, err
}
query = dbInterface.Rebind(query)
err = dbInterface.Select(&list, query, args...)
問合せ:
SELECT * FROM table_name WHERE some_id IN (?) ORDER BY created_at;
挿入するクエリの種類と値の種類を表示してください。これらの値はどこから来ていますか?あなたの行くコードから?ファイル?別のテーブル? – Patrick
@Patrickはちょうどそれを更新しました –
あなたの値の最小/最大を取って、その範囲を照会して、Goコードで必要なレコードだけをフィルタリングしてみてください。 – saarrrr