Oracle10gXEとSQLServer2005のパフォーマンス比較

同一ハードウェアにOracle10g XE と SQL Server2005をインストールして、
同じデータ量のDBでそれなりのSQLを実行しての差をみてみました。
(Tableレイアウトは同一、データ量も同一、キー定義も同一。DB自体のチューニングはしていません。各々デフォルト設定です)
あくまでもざっくりとした目安であり、標準的なSQLを実行したときのレスポンス差をみるためのテストです。

サーバのハードウェア=Celeron2.4GHz,メモリ2GB,HDD80GB、OS=Windows2000
DB= Oracle 10g Express Edition (OracleのフリーDB)とSQL-Server2005DeveloperEdition
各Tableのレコード数
HC$MASTER_TOKUI 150
HC$MASTER_SHOHIN 1479
HC$TRAN_TORI0 326406
HC$TRAN_TORI1 834846
HC$MANAGE_ZAIKO 377829
実行SQL問い合わせ文(上の5つのtableから最終的に150件程度の集計レコードを返す)
; -------------------------
select D0.伝票処理区分,D0.取引先CD1,M1.得意先名,count(*) 件数,SUM(D0.数量合計) T数
,SUM(D0.明細金額合計) T金額,SUM(D1.数量) T明細数,SUM(D1.金額) T明細金額
,max(Z1.在庫) 在庫,max(Z1.倉庫CD) 倉庫CD,sum(S1.原価*D1.数量) 原価合計
from HC$tran_TORI0 D0
join HC$master_tokui M1 on (M1.得意先CD=D0.取引先CD1)
join HC$tran_tori1 D1 on (D1.ヘッダNO=D0.SEQ_NO)
join HC$master_shohin S1 on (S1.商品CD=D1.商品CD)
join (select 倉庫CD,sum(当月在庫数) 在庫 from HC$manage_zaiko group by 倉庫CD) Z1 on (M1.得意先CD=Z1.倉庫CD)
where D0.伝票処理区分=1
group by D0.伝票処理区分,D0.取引先CD1,M1.得意先名
order by sum(S1.原価*D1.数量) desc
; -------------------------
ちなみにSQLの内容自体はとりあえず伝票のヘッダと明細の件数、数量、金額を集計して在庫らしきものと原価らしきものも集計して原価合計の高い順に出すような内容です。それなりに時間がかかるよう効率的でない書き方をしていますが...
(実際にはさらに条件がついて複雑になりますが、SQL-Server側でサポートしてない関数があるため簡略化しました)
ネットワーク上のクライアントからそれぞれ連続で5回Queryを実行し2回目以降のQueryから集計しました。(キャッシュ等の影響を考慮)
; -------------------------
ORA1回目=00:00:10.0156250
ORA2回目=00:00:09.9687500
ORA3回目=00:00:11
ORA4回目=00:00:13.2031250
; -------------------------
SQL1回目=00:00:23.7343750
SQL2回目=00:00:21.7656250
SQL3回目=00:00:23.7812500
SQL4回目=00:00:26.3593750
; -------------------------
...Oracleの倍勝ちです。しかしSQL-Serverもずいぶん頑張っています。5,6年前チェックしたときには5-10倍差があったような気がしますので....
このデータ量は実ユーザの1ヶ月程度の量であり、SQL文もたいして複雑ではないので、実際にはもっと差がつくような気がします。

ただ倍程度の差で収まっていれば、ハードウェアを倍程度のスペックを用意すればおそらくSQL-Serverも十分使えると思いますので、OracleMasterとしては、ずいぶんSQL-Serverもよくなってきたという印象を持ちました。(^^;)

(補足)SQL-Server2005インストール直後はローカルアクセスのみになっている。
sql-serverセキュリティ構成」(サービスと接続の...)で、リモート接続を許可する。(要再起動)
(SqlServer2005SurfaceAreaConfiguration)