私は初めてMySQLを使用しており、SQL Server Expressと比較して基本クエリが完了するまでの時間に驚いています。私はデータベースについては初心者ですので、シンタックスや設定で基本的なものを変更して "仕事"にすることができれば嬉しいです。mySQLはこれを長く取るべきですか、設定が間違っていますか?
私はmySQL 5.7、Workbench 6.3を使用しています。サーバー/クライアントは同じローカルマシン上にあり、1人のユーザー(ルート)のみです。
この例を取ってください。
CREATE TABLE original_table
(
myTimeStamp datetime,
PRIMARY KEY (`myTimeStamp`)
);
は楽しみのために、私は2009年から2017年= 420万件のレコードを1分間隔で連続的な日付時刻を持つテーブルを埋め:私は、単純なテーブルを持っています。さて、単純にそのテーブルを別の新しいテーブルにコピーするには、272秒が必要です。
CREATE TABLE new_table AS SELECT * FROM original_table
とINSERTでそれをしようと209秒取ります
Windowsのタスクマネージャを見るとCREATE TABLE new_table LIKE original_table;
INSERT new_table SELECT * FROM original_table;
をCPUが過去行かないので、驚くべきことである容量とのmysqldの4%しか0.1-2を取りますCPUの%。 WorkbenchはCPUの0.3%を使用します。
興味深いCLUE:
:私が代わりに一時テーブルにコピーしようとした場合、タスクが完了すると10倍の速さ( 22秒)、およびWindowsタスクマネージャは、mysqldを示しては、CPUの5〜10%のかかりますCREATE temporary TABLE newTemp LIKE original_table;
INSERT newTemp SELECT * FROM original_table;
何が起こっているのか、またはこれがmySQLのパフォーマンスですか?
ありがとうございました。それは68秒に改善されました。あなたが投稿した記事を読んで、もっと構成できるかどうかを確認します。最適な構成では、標準の家庭用コンピュータ(3.2 GHz)を使用すると、このようなものがどれくらいの期間は必要ですか?私は特定の数字ではなく、5秒か50秒で話しているのですか? – MikeD
@MikeD実験しているデータ挿入のタイプはルーチンではありません。 MySQLにははるかに高速なバッチインサートがあります。典型的なデータベースベースのアプリケーションでは、挿入/更新クエリと比較してはるかに多くの読み取りクエリがあります。このようなシナリオでは、DBを最適化して読み込みを高速化する必要があります。 –