みたいな疑問で、追いかけてみたキーワード、Parallelism
で、たどりついたのが、ここ↓
http://blogs.msdn.com/craigfr/archive/tags/Parallelism/default.aspx
http://blogs.msdn.com/craigfr/archive/2006/11/01/parallel-scan.aspx
http://blogs.msdn.com/craigfr/archive/2006/11/08/parallel-nested-loops-join.aspx
SQL-Server2005って賢くって、「いっぱい結果が返るみたいだし、パラレルっちゃって♪」的に勝手にCPUごとに予想取得件数レコード数を半分こしてSELECTするように出来ている。でも、動いている中で、SQL-Serverのターン!っぽくCPUやらメモリーやら独占しちゃうのはまずいから、Barancingしろや、との事です。
ってカンタンに言うけどさー、このBarancingがむずいんやってば…… 取ってくるデータレコード数によっては、GoodなはずのSQLもBADだし、BADなSQLもGoodになったりする、まぁ賢いっちゃぁ賢いんだけど、これだけ状況に左右されやすいと中間地点というか落とし所が決めづらい、大変だよなぁ。
Parallelismしちゃうか、Hashでいくか、そのあたりのさじ加減は取得データレコード件数とmax degree of parallelismオプションとの兼ね合い。これを総じてBarancingってことみたいなんだけど……
などと言いつつ、SQLいぢりまくりのチューニング中……。サーバーがサーバーなだけにParallelismはCPUへの負担が大きいので、できれば避けたいんだけど、データ件数上避けられそうにないらしいし、大人の事情は苦しいっす(と珍しく弱音w)
限られた環境でのチューニングで結果を出すのって辛いよねぇ……