mysqlとoracleの違い結節(機能性能、選択、使用時のsqlなどの対比)

6225 ワード

一、合併性
併発性はoltpデータベースの最も重要な特性ですが、同時に資源の獲得、共有とロックに関連しています。
mysql:
mysqlは表級錠を主として、資源ロックの粒度が大きいです。もし一つのsessionが一つの表にロック時間をかけすぎると、他のsessionはこの表のデータを更新できなくなります。
InnoDBエンジンのテーブルは行レベルでロックできますが、この行レベルロックのメカニズムは表のインデックスに依存しています。表にインデックスがない場合、またはsql文はインデックスを使用していません。
oracle:
oracleは行レベルのロックを使って、資源に対してロックする粒度はとても小さくて、sqlの必要な資源だけをロックして、しかもロックをプラスするのはデータベースの中のデータの行で、インデックスに依存しません。だからoracleは合併性に対する支持がとてもいいです。
二、整合性
oracle:
oracleはserializableの隔離レベルをサポートしており、最高レベルの読書一貫性を実現しています。各セッションの提出後に他のセッションが提出の変更を見ることができます。oracleは、undoテーブル空間に複数のバージョンのデータブロックを構築することにより、読み取り一貫性を実現し、
各セッションクエリの場合、対応するデータブロックが変化すると、oracleはundoテーブル空間でこのsessionのためにクエリ時の古いデータブロックを構築します。
mysql:
mysqlはoracleのような多バージョンのデータブロックを構築する仕組みがなく、read comitedの分離レベルのみをサポートしています。一つのセッションでデータを読み出す場合、他のセッションではデータを変更できませんが、テーブルの最後にデータを挿入することができます。
sessionでデータを更新する時は、列を付けて鍵をかけます。他のセッションではデータにアクセスできません。
三、事務
oracleは早くから事務を完全に支持しています。
mysqlはinnodbにエンジンのラインロックを格納する場合に事務をサポートします。
四、データの耐久性
oracle
提出したデータはいずれも復旧できることを保証します。oracleは提出したsqlオペレーティングラインをオンラインオンラインのログファイルに書き込み、ディスクに保存しました。
データベースやホストが異常に再起動されたら、oracleはオンラインログをテストして、お客様の提出したデータを回復します。
mysql:
デフォルトでsql文を提出しますが、更新中にdbやホストが再起動したら、データが失われるかもしれません。
五、提出方式
oracleはデフォルトでは自動的に提出されません。ユーザが手動で提出する必要があります。
mysqlはデフォルトで自動提出です。
六、論理バックアップ
oracle論理バックアップの場合はデータをロックせず、バックアップのデータは一致します。
mysql論理バックアップ時にデータをロックしてこそ、バックアップのデータが一致して業務に影響を与えるdmlの使用が保証されます。
七、熱バックアップ
oracleには成熟した熱準備ツールのrmanがあり、熱準備の際、ユーザーがデータベースを使用することに影響を与えません。バックアップしたデータベースが一致しなくても、復旧時にアーカイブログとオンラインやり直しログで一致した返信ができます。
mysql:
mysisamのエンジンは、mysqlが持参したmysql Hostcopyで熱的に準備する場合、表に読み書きロックを付けて、dmlの操作に影響を与えます。
innodbのエンジンはinnodbのテーブルとインデックスをバックアップしますが、バックアップしません。framファイルです。ibbbaackupでバックアップすると、バックアップ期間のデータ変化をログファイルに記録しますので、テーブルをロックせずに他のユーザーのデータベース使用に影響を与えません。このツールは有料です。
innobackupはibbaackupが使っているスクリプトを結合しています。framファイルのバックアップに協力します。
八、sql文の拡張と柔軟性
mysqlはsql文に対して多くの非常に実用的で便利な拡張があります。例えば、limit機能、insertは一回に複数行のデータを挿入できます。selectのいくつかの管理データはfromを追加しなくてもいいです。
oracleはこの面でもっと落ち着いて伝統的な感じがします。
九、コピー
oracle:押したり引いたりする伝統的なデータのコピーもあれば、ダタグリルの双機または多機災害機構もあります。メインライブラリに問題があります。自動的に在庫をメインライブラリに切り替えることができますが、配置管理が複雑です。
mysql:サーバーのコピーは簡単ですが、メインライブラリに問題が発生した場合、ライブラリが一定のデータを失う可能性があります。また、手動でライブラリをメインライブラリに切り替える必要があります。
十、性能診断
oracleには様々な成熟した性能診断ツールがあり、多くの自動分析、診断機能を実現できます。例えばawr、addm、sqltrace、tkproofなどです。
mysqlの診断の優れた方法はより少なくて、主に遅い調査の日誌があります。
十一、権限と安全
mysqlのユーザーはホストと関係がありますが、意味がないと感じています。また、フィッシングマシンやipに乗じる機会がありやすいです。
oracleの権限は安全概念と伝統的であり、規則的である。
十二、パーティションテーブルとパーティションインデックス
oracleのパーティションテーブルとパーティションインデックス機能は成熟しており、ユーザーがdbにアクセスする体験を高めることができます。
mysqlのパーティションテーブルはまだ熟していません。
十三、管理ツール
oracleにはいくつかの成熟したコマンドライン、グラフィックインターフェース、web管理ツールがあります。他にも多くの第三者の管理ツールがあります。管理はとても便利で効率的です。
mysql管理ツールが少ないです。linuxでの管理ツールのインストールは、追加のパッケージ(phpmyadmin、etc)をインストールすることがあります。複雑さがあります。
十四、技術サポート
oracleに問題があったら、カスタマーサービスを探してもいいです。
mysq問題は自分で解決します。
十五、授権
oracle有料
mysqオープンソース-無料
十六、選択
お金があるなら、アドバイス用oracle
お金がなくて、需要を満たすことができます。mysqを使います。アリババ、wiki百科などの大型プロジェクトもmysqlを使っています。主に分布式記憶、キャッシュ、分表分庫などの技術を使いました。
次はもう一つの文章です。主にsqlの方面から比較します。
OracleデータベースとMySQLデータベースの違いは本論文で紹介した内容です。ご協力をお願いします。
1.グループ関数の使い方規則
mysqlのグループ関数はselect文で自由に使用できますが、oraceではクエリー文にグループ関数がある場合、他の列名はグループ関数で処理されたものか、またはグループbyサブ文の列でなければエラーが発生します。
eg:
select name,count(money)from user;これはmysqlに置いて大丈夫です。oracleに問題があります。
そして、select name、count(money)from user group by nameまたはselect max(name)、count(money)from user;
oracleでは間違えないです。同じようにmysqlでも間違いないです。
2.自動的に成長するデータタイプの処理
MYSQLは自動的に成長するタイプのデータがあります。記録を挿入する時はこのフィールドを操作しなくても自動的にデータの値が得られます。ORACLEには自動的に成長するデータタイプがありません。自動的に成長するシリアル番号を作成し、記録を挿入する時はシリアル番号の次の値をこのフィールドに割り当てます。
CREATE SEQUEnceシーケンス番号の名称(テーブル名+シリアル番号の表記が望ましい)INCREMENT BY 1 START WITH 1 MAXVALE 9999 CYCLE NOCACHE;
最大値はフィールドの長さによって決まります。定義された自動成長シーケンス番号NUMBER(6)の場合、最大値は99999です。
INSERT文はこのフィールド値を挿入します。シーケンス番号の名前です。NEXTVAL
3.単引用符の処理
MYSQLはダブルクォーテーションで文字列を包むことができます。ORACLEではシングルクォーテーションマークだけで文字列を包むことができます。文字列の挿入と変更の前には、単一引用符の置換が必要です。出現したすべての単引用符を2つの単引用符に置き換えます。
4.ページをめくるSQL文の処理
MYSQLはページをめくるSQL文を処理するのが簡単で、LIMITで開始位置を記録します。PHPではSEEKで結果集の位置を特定することもできます。ORACLEではページをめくるSQL文を扱うのが煩雑です。各結果セットは一つのROWNUMフィールドだけがその位置を示し、ROWNUM<100のみが使え、ROWNUM>80は使えない。
以下は分析した後に良い二つのORACLEでSQL文(IDは唯一のキーワードのフィールド名です)をめくります。
ステートメント1:
SELECT ID、[FIELD_]NAME,…]FROM TABLE_NAME WHERE ID IN(SELECT ID FROM(SELECT ROWNUM AS NUMROW,ID FROM TABLE_NAME WHERE条件1 ORDER BY条件2)WHERE NUMROW 80 AND NUMROW<100)ORDER BY条件3;
語句二:
SELECT*FROM((SELECT ROWNUM AS NUMROW,c.*from(select[FIELD_]NAME,…]FROM TABLE_NAME WHERE条件1 ORDER BY条件2)c)WHERE NUMROW 80 AND NUMROW<100)ORDER BY条件3;
5.長い文字列の処理
長い文字列の扱いはORACLEにも特別なところがあります。INSERTとUPDATEで最大操作可能な文字列の長さは4000バイト以下です。もっと長い文字列を挿入するなら、フィールド用CLOBタイプを考慮してください。ORACLEで持参したDBMS_を借ります。LOBパッケージです。変更記録を挿入する前に、必ず空と長さの判断をしてください。空のフィールド値と長さのフィールド値を超えてはいけません。最後の操作に戻ります。
6.日付フィールドの処理
MYSQL日付フィールドはDATEとTIMEの2種類に分けられています。ORACLE日付フィールドはDATEのみで、年月日を含む時分秒情報があります。現在のデータベースのシステム時間はSYSDATEで、正確に秒になります。または文字列で日付型関数TO_に変換します。DATE(‘2001-08-01'、'YYY-M-DD')年-月-日24時間:分:秒のフォーマットYYY-M-DD HH 2 4:MI:SS TO_DATE()はまだ多くの日付書式があります。ORACLE DOCを参照してください。日付型フィールドは文字列関数TO_に変換されます。CHAR(‘2001-08-01'、'YY-M-DD HH 24:MI:SS')
日付フィールドの数式には大きな違いがあります。MYSQLは現在の時間から7日間DATE_を使います。FIELD_NAME>SUBDDATE(NOW()、INTERVAL 7 DAY)ORACLEは、現在の時間から7日間はDATE_を使うことを見つけました。FIELD_NAME>SYSDATE-7
MYSQLに現在の時間を挿入するいくつかの関数は、NOW()関数は、‘YYYY-M-DD HH:MM:SS’で現在の日付時間を返します。DATETIMEフィールドに直接保存できます。CURDATE()は「YYYY-M-DD」形式で今日の日付を返します。DATEフィールドに直接保存できます。CURTIME()は「HH:MM:SS」形式で現在の時間を返し、直接TIMEフィールドに保存することができます。例:insert into tableaname(fieldname)values(now()
oracleでは現在の時間はsysdateです。
7.空の文字の処理
MYSQLの非空フィールドも空の内容があります。ORACLEでは空でないフィールドを定義していますので、空いている内容は許されません。MYSQLのNOT NULLでORACLEテーブル構造を定義します。データを導き出す時にエラーが発生します。したがって、リードデータの場合は、空の文字を判断します。NULLまたは空の文字であれば、スペースの文字列に変更する必要があります。
8.文字列のあいまいな比較
MYSQLではフィールド名like%で「文字列%」、ORACLEではフィールド名like%で「文字列%」を使用することもできますが、この方法はインデックスを使用することができず、速度が速くなく、文字列で関数instr(フィールド名、「文字列」)を比較するとより正確な検索結果が得られます。
9.プログラムと関数では、データベースを操作した後、結果セットとポインタのリリースに注意してください。