0

古いWindowsXPシステムでMySQLでEasyPHP12.1を使用しています。10未満のテーブル作成と200,000を超えるINSERTINTOステートメントを含むSQLスクリプト(script.sql)があります。スクリプトは次のように構成されています。

SET autocommit = 0;
START TRANSACTION;
USE myDatabase;
...
COMMIT;

ここで、...はスクリプトの本体であり、そのほとんどは挿入です。

私はこれをmysql-uuser-ppassword<script.sqlで実行しています。

これを行うと、レコードの約1/3を挿入するのに1時間以上かかります。これは正しくないので、私は何か間違ったことをしているに違いありません-しかし、何ですか?このスクリプトに問題がありますか?このスタックに既知のバグやパフォーマンスの問題はありますか?

4

1 に答える 1

0

コメントで発生しなかったことが1つあります。ストレージ エンジンは、データの保存場所に影響を与えます。これは保存方法にも影響し、MyISAM は INSERT で innoDB よりも遅くなります (myISAM は挿入ごとに完全なインデックスの再書き込みを必要とするため)。

MEMORY エンジンを使用している場合は、変更を検討してください。MEMORY は一時テーブルに適しています。サーバーをシャットダウンすると、テーブルの内容が失われます。MEMORY は永続テーブルには使用しないでください。

データがインデックス化されていない場合は、InnoDB、MyISAM、または ARCHIVE を検討してください。これにより、最初の作成時間が大幅に長くなります (MEMORY とは異なり、MyISAM、INNODB、および ARCHIVE の両方がディスクに書き込み、インデックスを再生成する必要があるため) が、少なくともテーブルが奇跡的に消えないことを意味します。サーバーをシャットダウンした瞬間。

ほとんどの場合、非常に重要であるため、さまざまなストレージ エンジンについて読むことを強くお勧めします。それらには、非常に優れた機能もいくつかあります。

于 2012-11-18T17:29:30.087 に答える