都内で働くSEの技術的なひとりごと / Technical soliloquy of System Engineer working in Tokyo

都内でサラリーマンやってます。SQL Server を中心とした (2023年からは Azure も。) マイクロソフト系(たまに、OSS系などマイクロソフト以外の技術も...)の技術的なことについて書いています。日々の仕事の中で、気になったことを技術要素関係なく気まぐれに選んでいるので記事内容は開発言語、インフラ等ばらばらです。なお、当ブログで発信、発言は私個人のものであり、所属する組織、企業、団体等とは何のかかわりもございません。ブログの内容もきちんと検証して使用してください。英語の勉強のため、英語の

昔書いたクエリを SQL Server 2008 に対応してみた

 今日は SQL Server 2008 のメンテナンスの日。作業をしている〇きちという方が、下記のクエリが 2008 で動作しないとうるさいので、書き直してみます。

SELECT [テーブル名] = t.name, [統計名] = s.name, [統計の自動作成] = s.auto_created, [NORECOMPUTEオプション] = s.no_recompute, [フィルター定義] = s.has_filter, [フィルター定義] = s.filter_definition, [行数] = sp.rows, [フィルター化されていない行数] = sp.unfiltered_rows, [ステップ数] = sp.steps, [サンプリング行数] = sp.rows_sampled, [統計情報最終更新日] = sp.last_updated FROM sys.tables AS t INNER JOIN sys.stats AS s ON s.object_id = t.object_id CROSS APPLY sys.dm_db_stats_properties(s.object_id, s.stats_id) AS sp ORDER BY t.name OPTION (RECOMPILE);

インデックスの統計内容について参照してみる - 都内で働くSEの技術的なひとりごと

 sys.dm_db_stats_properties は SQL Server 2008 R2 Service Pack 2 から搭載された DMV です。統計情報が更新された日が確認できるように STATS_DATE を使ってクエリを書き直してみましょう。

SELECT 
    [テーブル名] = t.name,
    [統計名] = s.name, 
    [統計の自動作成] = s.auto_created, 
    [NORECOMPUTEオプション] = s.no_recompute,
    [フィルター定義] = s.has_filter,
    [フィルター定義] = s.filter_definition,
    [統計情報更新日] = STATS_DATE (t.object_id, i.index_id)
FROM 
    sys.tables AS t 
    INNER JOIN sys.stats AS s ON 
    s.object_id = t.object_id
    INNER JOIN sys.indexes i ON
    t.object_id = i.object_id
ORDER BY 
    t.name

f:id:koogucc11:20160501000029p:plain

この本の SQL Server 2016 版とか出ないかなぁ。SQL Server やり始めたときにお世話になった本。

アドバンストMS SQL SERVER 2008 構築・管理 (マイクロソフトコンサルティングサービステクニカルリファレンスシリーズ)

アドバンストMS SQL SERVER 2008 構築・管理 (マイクロソフトコンサルティングサービステクニカルリファレンスシリーズ)