0

こんにちは、SQL の達人です... 今月は、解決できないように見える長い問題があります。私はこの非常に広い(レポート)テーブルを約持っています。100以上のフィールド。現在、約 200 万件のレコードがあり、データが来る速度を考えると、今後 1 ~ 2 か月でこの数はおそらく 2 倍になるでしょう。現時点では許容範囲です。しかし、次の数か月でもう確信が持てなくなります。基本的に、このタイプのテーブルに最適なインデックス作成プランを知りたいだけです。これは実際のテーブルではありませんが、非常に近いものです。使用されるさまざまなデータ型を説明したいだけです。

    ID bigint IDENTITY (UNIQUE CLUSTERED INDEX)
    Column1 varchar(4000) NULL
    ...
    Column50 varchar(1000) NULL
    Column60 int NULL
    ...
    Column60 nvarchar(max) NULL

現在、このテーブルは現在、次の方法でクエリされています。

    SELECT <ALL COLUMNS EXCEPT ID>
    FROM ThisTable WITH(NOLOCK)     --i know how this works dont warn me :)
    WHERE 
        (@Column1 IS NULL OR  CHARINDEX('|' + [Column1] + '|', @Column1) > 0))
        ...
        AND (@Column99 IS NULL OR  CHARINDEX('|' + [Column99] + '|', @Column99) > 0))

各パラメーター/フィールドの可能な値は次のとおりです。

    @Column1 = '|value1|value2|value3|'

    Column1
    value1
    value2

私は基本的な実行計画の読み取りを知っており、私が見ることができるものから...たくさんのスキャンが行われています. しかし、私が言ったように、私はすでに壁にぶつかったようです. 小さなテーブルの目的に基づいてインデックスを作成する方法を知っていますが、これは広いテーブルですか?? 私はただ自分自身を笑うことができます:D

アイデアはありますか?Columnstore INDEX について少し読んだことがあります..これは私が考えることができる最も実行可能なソリューションです..しかし、この時点でこのアプローチについて利用できる情報はほとんどありません。

どうやってこのテーブルを思いついたのか疑問に思っているなら. その内容は異なるテーブルから来ています(フラット化)。処理は毎晩行われます。結果は CSV ファイルにエクスポートされ、別のレポート アプリケーションのデータ ソースとして機能します。

前もって感謝します!

4

1 に答える 1