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

SQL Server-計算列のインデックス?

    次の形式のフィールドがあると仮定します:

    00Data0007
    000000Data0011
    0000Data0015
    

    、次のことができます:

    • 計算列を作成します:ndata AS RIGHT(REVERSE(data), LEN(data) - 4)

      これにより、列が次のように変換されます。

      ataD00
      ataD000000
      ataD0000
      
    • その列にインデックスを作成する

    • このクエリを発行して、文字列Dataを検索します :

      SELECT  *
      FROM    mytable
      WHERE   ndata LIKE N'ataD%'
              AND SUBSTRING(ndata, LEN(N'ataD') + 1, LEN(ndata)) = REPLICATE('0', LEN(ndata) - LEN('ataD'))
      

      最初の条件では、粗いフィルタリングにインデックスを使用します。

      2つ目は、すべての先頭の文字(計算列の末尾の文字になった)がゼロに過ぎないことを確認します。

    パフォーマンスの詳細については、ブログのこのエントリを参照してください:

    更新

    SUBSTRINGのインデックスが必要な場合 スキーマを変更せずに、ビューを作成することはオプションです。

    CREATE VIEW v_substring75
    WITH SCHEMABINDING
    AS
    SELECT  s.id, s.data, SUBSTRING(data, 7, 5) AS substring75
    FROM    mytable
    
    CREATE UNIQUE CLUSTERED INDEX UX_substring75_substring_id ON (substring75, id)
    
    SELECT  id, data
    FROM    v_substring75
    WHERE   substring75 = '12345'
    


    1. MySQLの共通テーブル式

    2. ResultSetのデータを列名と一緒に出力します

    3. #1214-使用されるテーブルタイプはFULLTEXTインデックスをサポートしていません

    4. 主キーをダンプせずにmysqldumpテーブル