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

列 x にインデックスを作成して、SELECT DISTINCT x FROM hugeTable クエリを最適化できますか?

    これはおそらく索引付けの問題ではなく、データ設計の問題です。正確にはノーマライゼーション。フィールドの個別の値を照会する必要があり、さらにはインデックスを追加する必要があるという事実は、(小さい) 結合キーを使用してフィールドを別のテーブルに正規化する必要があることを示す強力な指標です。次に、はるかに小さいルックアップ外部テーブルをスキャンすることにより、個別の値がすぐに利用可能になります。

    更新
    回避策として、インデックス付きビュー 「distinct」フィールドによる集約。 COUNT_BIG インデックス付きビューで許可されている集計です:

    create view vwDistinct
    with schemabinding
    as select x, count_big(*)
    from schema.hugetable
    group by x;
    
    create clustered index cdxDistinct on vwDistinct(x);
    
    select x from vwDistinct with (noexpand);
    


    1. MySQLテーブル名の特殊文字

    2. JSONデータをmysqlに保存する

    3. 一連の値の全範囲を出力する

    4. MySQLの主キーでもある外部キーを作成するにはどうすればよいですか?