• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:MySQLとSQLServerの性能の違いについて)

MySQLとSQLServerの性能の違いについて

このQ&Aのポイント
  • MySQLとSQLServerの性能にはいくつかの違いがあります。アクセス数が増えた場合にパフォーマンスが悪くなる可能性があり、改善が必要です。
  • MySQLを複数台で構成する場合、プログラムの修正は不要でデータの冗長化ができます。一方、SQLServerに入れ替える場合はハード一台とSQLServerのライセンス料が必要になりますが、各アクションの速度が向上します。予算に応じて適切な選択肢を検討してください。
  • 上記の2つの案から、予算の制約やプログラムの修正の有無、データの冗長化の重要性などを考慮して、最適な選択肢を選んでください。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

解決策ではないですが、気になったことを >アクセス数が増えパフォーマンスが悪くなった MySQLの問題と言っても大きくいって4つは検証すべきことがあります (1)インデックスの問題 単純に非効率なSQLを吐いていたらなんのSQLでやってもたいして 改善はみこめません。 ただし、更新・削除が遅いとなるとインデックスでなんとかなるとも言えません。 (2)エンジンの問題 MySQLの特徴はエンジンが選べること 特に高速な処理をしたい場合はトランザクションを設定せずにMyISAMを 利用するのも手です。また一時的にHEAPをつかったりいろいろ改善の手は あるかも知れません。 (3)MySQL自体の問題 ここ数年話題になっている「そもそもMySQLはフロントエンドがおそいので エンジンを活かしきっていない」という問題があります。 そこでNoSQLなどがもてはやされたりしているのですが、さらにすすんで 「HandlerSocket」などで高速化するのも検討できるようになってきました。 参考:http://itpro.nikkeibp.co.jp/article/Interview/20110801/363141/ (4)ハードウェア的な問題 ハード的な問題もあるし、メモリの利用状況などもあるので ハードの強化でなんとかなるかもしれません。 とくにMySQLはマルチCPUに比例的に高速化ができるらしいので やすくてもマルチコアCPUにするだけでおおきくパフォーマンスが あがる可能性があります。

punipuni_2
質問者

お礼

ありがとうございます。 上層部の方ではお金をかけて強化したいようなので (このご時世ですが)SQLServerに移行するメリットを深堀してゆくことになりそうです。 でもMySQLの技術進歩していることが分かりました。 MySQLを使用し続けることも提案してみようと思います。 大変参考になりました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1

まずは本当にDBがシステムのボトルネックになっているのかどうかを検証してください。 その上で、MySQLの設定がきちんとされているかを確認する必要があります。 InnoDBバッファの値やsort_buffer_sizeは適正でしょうか。 OSはLinuxですか、それともWindows? 例えば、DISK I/OがボトルネックになっているのならSQLServerに変更してもパフォーマンスの向上は見込めないと思います。 なお、MySQLのパフォーマンスチューニングについては「実践ハイパフォーマンスMySQL 第2版」が詳しいです。一読をお勧めします。

punipuni_2
質問者

補足

nora1962さんアドバイスありがとうございます。 自分の所属がシステムではなく、業務推進(改善)で プログラムコードやパフォーマンスチューニングを実施することは出来ず、 現場担当者に依頼する立場なのです。 担当者にヒヤリングしたところ、 MySQLの限界で、 特に更新、削除に時間がかかるのがネックだそうです。 チューニングは何度か行なっているようです。 OSはLinuxです。 一点質問させてください。 DBがシステムのボトルネックになっているかどうかの検証はどういったものを計測すれば出てくるのでしょうか。 何度もお手数ですがよろしくお願いします

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 大量同時並行処理時のMySQL

    1年くらい前のモバゲーなどはあれだけのユーザとクエリをMySQLサーバ600台位で処理しているそうですが(レプリケーションを考えると実質1/3くらいでしょうが)、どのような工夫がほどこされているのでしょうか? SELECTよりも処理の重いINSERT、UPDATEも1秒間にもの凄い数が来ると思います。 並行処理プログラム等にてDBにアクセスを同時に大量に行う場合等にはどのようなハード構造や、システム設定にすればいいのでしょうか? 1台のDBサーバに複数のMySQLを入れたり、仮想化してOSを複数入れて、とかで対処しているのでしょうか? それとも特にそのような事をしなくても(特に更新系の)大量同時クエリを裁くだけの実力がMySQLにはあるのでしょうか? 宜しくお願いします。

    • ベストアンサー
    • MySQL
  • mysqlで変数を使う方法

    SQL文にPHPの変数のように変動する値を指定することはできますでしょうか。 データベースから特定のレコードを拾ってきて PHPのPOSTメソッドでその値を送信するシステムを作ろうとしています。 具体的には、データベースに名簿(IDと名前だけの簡単なものです)を 予め作っておき、送信ボタンをクリックしたユーザーのIDと紐付いている 名前を送信したいと考えています。 [MySQL] table:meibo id | name ------------ 1 | itou 2 | yamada 3 | suzuki [PHPソース](一部抜粋) ------------ $sql = mysql_query('SELECT * FROM meibo where id=【ここを変動させたい】', $connect); $sql = mysql_fetch_array($sql); $req->addPostData("user_name", $sql['name']); ------------ $idに操作しているユーザーのIDが代入されているとして 以下のようにmysql_queryの中で実行しているSELECT文に$idを利用することは可能でしょうか。 SELECT * FROM meibo where id=$id もし上記のような方法が無理な場合、 代替案をご提案いただけると非常に助かります。 読みにくい文章で恐縮ですが、 どうかお助けください。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • (MySQLで修正スクリプトがうまくいかず困っています。

    最近MySQLをはじめました、まだ初心者の者です。 MySQLデータベースで、修正用のスクリプトがうまく起動いたしません。自分なりに色々書籍やネット検索致しましたがどこが間違っているのか見出せません。 お手数ですが、どうか指南お願い致します。 リンクから呼び出すスクリプトと削除スクリプトの二点です。 -------------------(始)ここから明細スクリプト(始)--------------- <?php extract($_GET); mysql_connect('localhost','root','xxxx'); mysql_select_db('xxxx'); $sql = "select * from xxxx where id = '{$id}'"; $result = mysql_query($sql); $rows = mysql_num_rows($result); if($rows == 0){ echo "検索データが見つかりませんでした。"; exit; } else { while($row = mysql_fetch_array($result)){ echo "<h2> " , $row["title"] , "</h2>"; echo "<p><font size=\"-2\">#", $row["id"] ," ●",$row["tourokubi"] ,"</font></p>\n"; echo "<p><div class=\"hon\">", nl2br($row["honbun"]), "</div></p>"; echo "<div class=\"key\">keywords: ", nl2br($row["keyword"]), "</div>"; $row["id"]; echo "</p>"; echo "</p>"; echo "<a href=\"correct.php?id="; echo $row["id"]; echo "\">[修正する]</a>"; echo "<a href=\"j_sakujo1.php?id="; echo $row["id"]; echo "\">[削除する]</a><hr>"; } } ?> ------------------------(終)ここまで(終)------------------------ -------------------(始)ここから削除スクリプト(始)--------------- <?php extract($_POST); extract($_GET); mysql_connect('localhost','root','xxxxx'); mysql_select_db('xxxxx'); //修正レコード if($honbun<>""){ $sql = "update xxxxx set title='$title', honbun='$honbun', keyword='$keyword' where id = $id"; mysql_query($sql); echo "レコードの修正が完了しました"; exit; } // 修正ルーチン $sql = "select * from xxxxx where id = $id"; $result = mysql_query($sql); while($row = mysql_fetch_array($result)){ $tourokubi = $row["tourokubi"]; $title = $row["title"]; $honbun = $row["honbun"]; $keyword = $row["keyword"]; } echo "<form action=\"correct.php\" method=\"post\" >\n"; echo "<p>・日付<br>\n"; echo $tourokubi, "</p>\n"; echo "<p>・タイトル<br>\n"; echo "<input type=\"text\" name=\"title\" value=\"",$title, "\"size=60 ></p>\n"; echo "<p>・本文<br>\n"; echo "<textarea name=\"honbun\" rows=20 cols=70 >\n"; echo $honbun; echo "</textarea></p>\n"; echo "<p>・キーワード(スペース区切りで列記)<br>\n"; echo "<textarea name=\"keyword\" rows=2 cols=70 >\n"; echo $keyword; echo "</textarea></p>\n"; echo "<p><input type=\"hidden\" name=\"i\" value=\"", $i, "\">  "; echo "<p><input type=\"submit\" value=\"修正\">  "; echo "<input type=\"reset\" value=\"クリア\"></p>\n"; echo "</form>\n"; ?> -------------------(終)ここまで(終)---------------------- 修正ボタンを押すと、修正しました。と表示されるのですが、 なぜかデータは更新されておりません。 自分なりに調べましたが、原因がどうしても分かりません。 ご指南よろしくお願い致します。

  • BSDライセンスで一部配布する時について

    現在MMORPGのようなクライアント、サーバアプリ型のアプリケーションを作っています。 クライアント部分のバグ発見やパフォーマンスを向上するために、修正BSDライセンスとしてソースを配布する場合、サーバ部分についてもソースを公開しなくてはいけないのでしょうか? それと以下の質問は今回とは直接関係ないのですが、サーバ部分をGPLで、クライアント部分をBSDライセンスで公開することができるのでしょうか?

  • DBのパフォーマンス、ライセンス費用について

    これから、商用のパッケージでシステム開発を行おうと思っています。 そこで、DBの選定をしている最中なのですが、 出来るだけコストをかけないでしたいので、 PostgreSQLで考えています。 (商用アプリでも無料ということだったので) ですが、MySQLやその他の商用DBも含めて、 費用(ライセンス)や速度、メモリ消費などのパフォーマンスで 何のどこが優れているかを教えていただきたいと思います。 (未チューニングの状態で) また、サイトなどのURLでも構いません。 よろしくお願いします。

  • Office365Businessのライセンス

    職場でPCが数十台あります。 先日、取引業者がOffice365Businessの提案をしてきました。 当方は、1台のPCを複数のスタッフが共有して使用しているものが多く、 私の考えとしては、Office365は1ユーザーごとのライセンス形態になるので、 当方の環境では使用者全員分のライセンスを購入する必要があり、そうなると 費用も大きくなるためメリットがないものと思っておりました。 ところが、提案業者曰く、あくまでも1ユーザーなので1人が複数台 使用している、つまり一つのOffice365のアカウントを1人のユーザーが 複数使用していることとすればライセンス違反にならないし、 バレることもない。何か言われても1人のユーザーが使っていたことにすれば 問題ないと言ってきました。 これって、たぶんグレーゾーン的なところのような気がするのですが、 このような使い方をされている方っていらっしゃいますでしょうか? 違反で罰せられることは本当にないのでしょうか? コスト削減とコンプライアンスの狭間で心が揺れています。 このような件をMicrosoft社の購入相談窓口に問い合わせるのは野暮なので ちょっとこちらで意見をお伺いできたら思い質問させて頂きました。

  • SQLインジェクションの危険性について[MYSQL]

    下記のコードはPHPプログラマ一年生の自分から見ても、 POST入力値をチェックしていない危険なコード(一部を抜粋)だと 思うのですが先輩は問題ないと言い、修正する気がありません。 そこで、SQLインジェクションのようなSQL文を送信された場合に ユーザー名とパスワードが表示されれば納得すると思い いろいろテストしてみたのですが、うまく表示されません。 実はSQLインジェクションなどの問題ないソースなのでしょうか? ご教授、よろしくお願いいたします。 ■テーブル構成(ユーザ・パスワード管理テーブル) CREATE TABLE `sample`.`test` ( `user_id` INT NOT NULL , `passwd` VARCHAR( 32 ) NOT NULL ) ■問題の処理分 <?php $user_val = "" ; $pass_val = "" ; if (isset($_POST["user_id"]) == TRUE) {   $mysql_c = mysql_pconnect('******' , "******" , "******");   mysql_select_db("******" , $mysql_c);   $sql = 'select * from test where user_id = ' . $_POST["user_id"] ;   $result = mysql_query($sql , $mysql_c);   if ( $result != false)   {     if(($row = mysql_fetch_object($result)) != false )     {       // パスワードチェック       if ( $row->passwd != $_POST["pass"] )       {         echo "check NG" ;       }       else       {         $user_val = $row->user_id ;         $pass_val = $row->passwd ;       }     }   } } ?> <FORM action="index.php" method="post" > <input type="text" name="user_id" value="<?php echo $user_val ?>" > <input type="text" name="pass" value="<?php echo $pass_val ?>" > <input type="submit"> </FORM>

    • ベストアンサー
    • MySQL
  • MySQLでデータ表示

    MySQLでデータの表示を行っています 10件ずつ表示し、11件からは2ページ目に表示したいです サイトや本を見ながらデータ表示と次の10件のリンクは表示されるよう自力で頑張ったのですが 次の10件を押してもデータが変わらず1件目から10件目のままです どこが違うか教えてもらえますか。 どうコードを入力するか教えてくれたらありがたいです 一覧 ta2.phpです <html> <body> <form action = "ta2.php" method="GET"> <input type="hidden" name="page" value="0"> </form> <?php //データベースに接続 if (!$con = mysql_connect("localhost", "root", "admin")) { echo "接続エラー" ; exit ; } //データベースを選択 if (!mysql_select_db("db_test", $con)) { echo "データベース選択エラー" ; exit ; } //LIMITを使ったSELECT文を作成 $sql = "select * from tbl_test" ; $sql.= " limit " . $page*10 . ", 10" ; //SQL実行 if (!$res = mysql_query($sql)) { echo "SQLエラー<BR>" ; exit ; } //検索結果表示 echo "<table border='1'> <tr> <th>番号</th> <th>氏名</th> <th>住所</th> <th>操作</th> </tr>"; while($row = mysql_fetch_array($res)) { $ID = htmlspecialchars($row['番号']); $NAME = htmlspecialchars($row['氏名']); $ADDR = htmlspecialchars($row['住所']); echo "<tr> <td>$ID</td> <td>$NAME</td> <td>$ADDR</td> <td><a href='edit.php?番号=$ID'>修正</a> <a href='delete.php?番号=$ID'>削除</a></td></tr>"; header('content-type: text/html; charset="utf-8"'); if ($_GET) { // データがGETされていたら $page = isset($_GET['page']) ? $_GET['page'] : ''; // 取得 } } $sql = "select count(*) from tbl_test " ; if (!$res = mysql_query($sql)) { echo "SQLエラー<BR>" ; exit ; } $row = mysql_fetch_array($res) ; $cnt = $row[0] ; //ページ表示 if(!$cnt > 10) echo ceil($cnt / 10), "ページの中の", $page + 1, "ページ目を表示<br>" ; //前の10件 if ($page != 0) { echo "<a href = ta2.php?page= $page>" ; echo "&lt 前の10件" ; } //次の10件 if (($page + 1)*10 < $cnt) { echo "<a href = ta2.php?page= $page>" ; echo " 次の10件 " ; } //結果セットの開放 mysql_free_result ($res) ; //データベースから切断 mysql_close($con) ; ?> </table> </body> </html>

    • ベストアンサー
    • MySQL
  • フォームからMySQLにデータが書き込めません。

    CentOS5.3 + php5.1.6 + MySQLServer version: 5.0.77の環境です。 下記のスクリプトを書きましたが、点数を書いてsubmitすると、「登録できませんでした」が表示され、データの書き込みができません。 var_dump($sql); で$sqlの内容も表示されますし、echo($conn) も Resource id #2が返ります。 .MYD, .MYI,.frm のパーミッションは777です。 どこが不具合の原因でしょうか? データを登録するためには、どのように修正すれば良いでしょうか? ご教示願えれば幸甚です。 [tensuform.php] <HTML><BODY> <H1 ALIGN="CENTER">点数</H1> <TABLE BORDER="1" ALIGN="CENTER" CELLSPACING="0"> <FORM action="tensuinst.php" METHOD ="POST"> <TR><TD BGCOLOR="#CCCCCC">点数</TD> <TD><INPUT TYPE="TEXT" NAME="tensu" value="" maxlength="3"></TD></TR> <INPUT TYPE="SUBMIT" NAME="SUBMIT" VALUE=" 書 込 "> <INPUT TYPE="RESET" VALUE=" ク リ ア "></TD> </TR></TABLE></FORM></BODY></HTML> [ tensuinst.php] <HTML><BODY> <?php $tensu=$_POST['tensu']; print $tensu."<br/>"; if($tensu ==" "){ echo ("点数が書き込まれていません。"); ?> <a href="tensupoform.php">"こちらからデータを書き込んで下さい。"</a><BR> </BODY></HTML>); <?php exit(); }elseif(!$conn = mysql_connect('localhost', "abcd", "efgh")){ die("データベース接続エラー.<br />"); }else{ mysql_select_db("wxyz", $conn); $sql = "INSERT INTO kokugo('tensu') VALUES('$tensu')"; // var_dump($sql); echo("<br>"); // echo($conn)."<br>"; mysql_query($sql, $conn) or die("登録できませんでした" ); mysql_close($conn); print("登録しました。"); } ?>

    • ベストアンサー
    • MySQL
  • 複数ライセンスについて

     Adobe やマイクロソフト、Autodesk 等のソフトを複数PCに追加導入する案があります。  そこでメーカーとライセンス契約(16台)を結び、1つのソフトにつき、1枚のメディア・シリアル番号で、16台の複数PCにインストールできるように契約しようと考えています。  ところで、今回のライセンス契約に際しては、各メーカーは、「インストールCDは必要な数だけお求めください」となっていました。    その「インストールCD」とは、店舗で売られている「パッケージ製品のCD」とは異なるものなのでしょうか?  というのも、「普通のパッケージに入っているCD」と「ライセンスとして複数PCに入れることができるCD」とが、まったく別ものでしたら、「ライセンスCD」を最低1枚は買わなければなりません。  もしパッケージCDと同じタイプでしたら、現在所有している、パッケージ(リテール版・当然1台に限りインストール可能)製品を、ライセンス向けとして、全16台にインストールできるようにして、CDをまったく買わずにライセンスだけを買うことができ、費用を節約できますので。