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

ビューに対するクエリは、1 つのクエリを実行するよりも遅いですか?

    あなたの単純な例では物事は同じですが、ネストされたビューを使用する場合は注意が必要です。

    私は、約 6 レベルのネストされたビューで構築された 30 秒後にクエリがタイムアウトするシステムで作業し、ベース テーブルに対するクエリを書き直すことで、これらを約 100 倍高速化することができました。

    発生する可能性のある問題のタイプの簡単な例を以下に示します。

    CREATE VIEW MaxTypes
    AS
    SELECT
      [number],
      MAX(type) AS MaxType
      FROM [master].[dbo].[spt_values]
    GROUP BY [number]
    
    GO
    
    CREATE VIEW MinTypes
    AS
    SELECT
      [number],
      MIN(type) AS MinType
      FROM [master].[dbo].[spt_values]
    GROUP BY [number]
    
    GO
    SET STATISTICS IO ON
    
    SELECT     MaxTypes.number, MinTypes.MinType, MaxTypes.MaxType
    FROM         MinTypes INNER JOIN
                          MaxTypes ON MinTypes.number = MaxTypes.number
    ORDER BY MaxTypes.number
    
    /*
    Gives
    
    Table 'spt_values'. Scan count 2, logical reads 16, physical reads 0, 
    read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
    */
    GO
    
    SELECT 
      [number],
      MAX(type) AS MaxType,
      MIN(type) AS MinType
      FROM [master].[dbo].[spt_values]
    GROUP BY [number]
    ORDER BY  [number]
    
    /*
    Gives
    
    Table 'spt_values'. Scan count 1, logical reads 8, physical reads 0, 
    read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
    */
    



    1. MySQL-グループからの最大値をフィルタリングして表示する方法は?

    2. ORA-00972識別子が長すぎますエイリアス列名

    3. nvarcharに改行を正しく挿入する方法

    4. MySQLの競合状態を適切に回避する方法