SQL Serverコンサルタントの Brent Ozar 氏は先日,すべての SQL Server 開発者が日々のプログラミングタスクで実践するべきだという,7つのテクニックを公表した。その中で氏は,ORDER BY 句はできる限り使用せずに,クエリ結果をメモリ上に格納して,アプリ側でデータソートを実行するべきだ,としている。
もしデータベースがデータ処理,ソート,ロード,キャッシュなど複数の処理を行っているならば,それぞれのタスクごとに別のデータベースを用意することが理想的だ。さらに各データベースは単純復旧モードで運用して,毎日1回バックアップを取得することが望ましい。
氏はまた,DMV(Dynamic Management Views) の効率的な利用を提案するとともに,例えばアプリケーションの書き込み,5~15分前に更新されたデータの参照,昨日のデータの参照といったさまざまなシナリオに対して,アプリ内で3つ別々の接続文字列を使用するようにアドバイスしている。SQL Serverには複数サーバによる書き込み処理をスケールアウトするための選択肢が少ないので,この最初のシナリオはスケールが難しい,という理由からだ。
"With(Nolock( よりも READ COMMITTED スナップショット分離 の方が,一貫性のあるデータを少ないブロックで取得することができるという面で,アプリケーションとしてはよい選択です。" と氏は述べている。
さらには,定期的に更新されないような古い版の書籍やオンライン記事は参考にならない,とも言う。"優れたアドバイスに見えるものであっても,アンチ-ドクターPhil (Phil McGraw:米国の心理学者) 戦略を採用すべきです" というのが氏の意見だ。
そして最後に氏は,コードの再利用には関数よりも,ストアドプロシージャ と ビュー を使用するように勧めている。関数はデータベース層において性能的なデメリットが大きい,ということがその理由だ。
氏のアドバイスに対しては反対者もいる。
例えば Tyler Burd氏の
#2 ("ORDER BYは使うな: アプリ内でソートせよ") には,無条件には賛成できません。
というコメントに対して,氏は次のように答えている。
データセット全体をアプリ層に落とし込んで,そこでキャッシュしてはどうでしょう?
関数に代えてビューやストアドプロシージャを使うべき,という提案に対しても,何人かの開発者からコメントが投稿されている。
Brentのアドバイスや提案に対して,読者は賛成あるいは反対,いずれの立場だろうか?氏の提案に対する意見をコメントしてほしい。