OracleとSQLServerを比較したとき、Oracleが優れている点ってどんなところだと思いますか?
また開発でOracleとSQLServerどちらかを提案するとき、どういった切り分けで2つを使い分けますか?
私が思うOracleの優位性は
・行ロックが確実
・RowIDの存在
・データが大容量でも比較的早い
・細かくチューニングができる
です。
またOracleかSQLServerかのどちらかの選択で、私が自由に提案できるとしたら、行ロックがほとんど必要ない&データ件数が数万~数十万程度ならSQLServer、行ロックが頻繁に必要&データ件数が数十万以上ならOracleを提案します。
ちなみに私のDBを使った開発歴は、Access1年程度、SQLServer1年程度、Oracle4年程度です。
よろしければ、みなさんのDBを使った開発歴も教えてください。
No.1ベストアンサー
- 回答日時:
こんばんは。
自分も大変興味ある話題です。>>行ロックが確実
これはMSSQLやDB2も搭載している機能ですよね。何をもって「確実」と
見るのかが難しそうです。
データ件数でのテスト評価は各ベンダーからベンチマークが
出てますが実際各DBに差はありますか?。
※同一マシン同件数一括更新などで
処理件数で提案するのは可能なのでしょうか?。。
>>RowIDの存在
両者を細部技術まで切り分ける際には話題になりそうですね。
ただ適切なSQLチューニングをすれば特に問題にはならないような気も。
自分のざっくりな印象ですが
>>Oracle
・情報、技術者が豊富
・業界標準という印象(実績が多い)
・複数OSサポート
・初期パラファイル、制御ファイルなど保守対象が多い
・チューニング作業には深い知識が必要(パラメータ、Explain含め)
>>SQLServer
・Windowsインフラとの親和性(Active Directoryなど)
・MS開発言語との親和性(2005など特に)
・GUIツールの充実(トレース、バックアップなど)
・自動メモリ管理による管理負荷の低減
インフラ、開発言語、で決まる要素なのかな?って印象ですが。。
回答ありがとうございます。
行ロックは、SQLServerでロックエスカレーションという現象に苦しめられた経験があって、最終的にSQLServerの仕様と知って「こんなの行ロックじゃない」と嘆いた経験からです。
処理速度は件数じゃなくてデータ量で測った方が正しいですね。同じ規模のテーブルを使ったSELECT文やコマンド発行の反応速度は、体感的にOracleの方が早かったです。今までの開発経験でいくとSQLServerは数十万件を超えると、Oracleは数百万件を超えるとパフォーマンス向上のためのテクを使わないと遅く感じた印象があります。主観的感想ですいません。
RowIDは一意キーを設定していないテーブルで痛い目を見たことがあります。その失敗に懲りて、SQLServerでは必ずSeqnoで一意キーを作るようにしました。でも正直、SQLServerもRowIDが欲しかった。。。
No.2
- 回答日時:
> ・行ロックが確実
> ・RowIDの存在
言わんとしているところはロック・エスカレーションがないということでしょうか。
これは排他制御方法の違いによるもので、OracleやPostgreSQLではロールバックセグメントを使用する「マルチバージョニング方式」を使用し、SQLServerやDB2では「ロック方式」を採用しているために起こる問題です。(参考URL)
どちらにも、一長一短があり、これがOracleの優位点とみなせるかどうかは疑問です。というのも、Oracleの場合は大容量のロールバックセグメントをあらかじめ用意しておく必要がありますし、トランザクションのたびにロールバックセグメントにデータを退避させる際のオーバヘッドも発生するからです。
> ・データが大容量でも比較的早い
何を根拠にそのようなことが言えるのかは分かりません。実際問題として、どちらも自社のデータベースが最速だと言い張っています。
ちなみに、世間一般では検索はOracle、更新はSQLServerと言われています。何をやらせてもOracleが勝つというわけではありません。
> ・細かくチューニングができる
私はSQLServerを使用したことがないので、あまり細かいことは知りませんが、これは当てはまるかもしれませんね。
その他、SQLServerにはWindowsでしか使用できないという最大の欠点があります。
それに、最近のバージョンになって問題は小さくなってきましたが、唯一対応しているWindowsは比較的不安定であり、データベースのプラットフォームとしてはやや敬遠される傾向がありました。今でも、セキュリティアップデートをするだけで再起動しなければならないのは恐らくWindowsだけでしょう。
一方Oracleは、Linux x86, Linux IA64、Solaris SPARC, Solaris x86, HP-UX PA-RISC, HP-UX Itanium, AIX, Windowsなどに対応してしていますね。Unix系のサーバを使う人は必然的にOracleを選択する (PostgresSQLやDB2もありますが・・・) わけですからそれだけシェアを稼げることになります。
参考URL:http://www.atmarkit.co.jp/fdotnet/entwebapp/entw …
回答ありがとうございます。
>言わんとしているところはロック・エスカレーションがないということでしょうか。
その通りです。以前、データ量の少ないマスタを作って複数の人間で同時接続していたら、誰かが更新しているとき、更新対象でないデータもロックがかかっていて更新できない、という現象が多発して困ったことがあったのです。
>SQLServerにはWindowsでしか使用できないという最大の欠点
これはまさにそうですね。
参考のURL面白かったです。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) EXCELの外部データ取得ができない 1 2023/03/23 09:03
- ソフトウェア 移行PCにDockerがインストールされていても各種開発環境のアプリはインストールが必要? 2 2023/05/21 21:53
- Oracle oracleで 10,20, 30, というデータがあるとして ,区切りでデータが何件あるか調べる関 3 2023/03/14 15:56
- その他(SNS・コミュニケーションサービス) 爆サイやっていたら、下のような文字が出ました! これは何なのでしょうか? nginx error! 1 2023/06/09 12:27
- Oracle Oracleですがsqlで質問です。 サブクエリ内で番号というカラムで昇順の1レコード目を取得したい 3 2023/05/22 10:02
- Java jdk17.06のインストーラーが起動しない 1 2023/03/27 21:58
- その他(ソフトウェア) JavaとOracle Javaって何が違うんですか? 1 2022/05/05 05:46
- Access(アクセス) Access DAOのExecuteメソッドのオプション(RecordsetOptionEnum)に 1 2022/09/19 07:34
- UNIX・Linux リナックス デビアン 起動できない 2 2022/06/16 22:36
- Oracle sql(oracle)で質問です。 テーブルAのカラム名、日付(yyyymmdd)の値を テーブルB 2 2023/01/06 10:31
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】看板の文字を埋めてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・【穴埋めお題】恐竜の新説
- ・我がまちの「給食」自慢を聞かせてっ!
- ・冬の健康法を教えて!
- ・一番好きな「クリスマスソング」は?
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
RDBのテーブル種類の違い
-
DELETE文でFROM句を省略した場合
-
select for updateのロック
-
datapumpの実行方法について
-
Viewにインデックスは張れ...
-
oracleのプライマリ・キー名の変更
-
データを削除しても表領域の使...
-
Data Pump で大量データインポ...
-
Access レコードを追加できませ...
-
EXPORT時にあるテーブルのみ範...
-
C#でaccdbファイルのテーブルの...
-
INDEXの無効化
-
CASCADE CONSTRAINTSについて
-
CLOB型へのINSERT
-
大量データの取得処理について
-
SQLiteから制約条件の取得
-
テーブルからのselectにおいて...
-
オラクルのビューの存在について
-
(ACCESS)複数mdbからのデータ...
-
SQL*Loaderで、データを加工し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DELETE文でFROM句を省略した場合
-
他の処理でselectさせないよう...
-
object browser で処理を中断す...
-
RDBのテーブル種類の違い
-
同じSELECT文同士でのデ...
-
[性能改善]AccessのDBに大量の...
-
accessでイベントを中止するよ...
-
SQLServerのロック?について
-
統計情報の取得=コミットですか?
-
年度毎にシーケンスの初期化?
-
Access2013で操作ログを残した...
-
stored procedureの引数について
-
PL/SQLの平行処理について
-
行ロックとテーブルロックについて
-
UPDATE がうまくいかない
-
PL/SQLでmdb(Access)ファイルへ...
-
カーソルについて
-
トランザクションのデータ件数...
-
ActiveX DLLでのオラクルのトラ...
-
Truncate以外で高速にテーブル...
おすすめ情報