3

mysqlテーブルから100,000を超える行を削除しようとすると、サーバーがフリーズし、そのWebサイト以外にアクセスできなくなるという質問があります。

2時間待ってからサーバーを再起動し、アカウントを復元しました。

私は次のクエリを使用しました:

DELETE FROM `pligg_links` WHERE `link_id` > 10000

-

SELECT* FROM `pligg_links` WHERE `link_id` > 10000 

完璧に動作します

これを行うためのより良い方法はありますか?

4

3 に答える 3

2

小さいセットの行を削除できます。一度に 1000 行を削除する簡単なスクリプトで問題が解決するはずです。

于 2012-05-18T22:10:40.087 に答える
1

「削除元」は、大規模なデータ セットの場合、非常にコストがかかる可能性があります。

パーティショニングの使用をお勧めします。

これは、PostgreSQL と MySQL では少し異なる方法で行われる場合がありますが、PostgreSQL では、より大きなテーブルの「パーティション」またはパーティション上に多くのテーブルを作成できます。クエリなどは、より大きなテーブルで実行できます。これにより、正しくパーティション化されていれば、クエリの速度が大幅に向上します。また、ドロップするだけでパーティションを削除できます。これは、テーブルを削除するのといくらか同等であるため、非常に迅速に発生します。

テーブルのパーティショニングに関するドキュメントは、次の場所にあります。

http://www.postgresql.org/docs/8.3/static/ddl-partitioning.html

于 2012-05-18T22:39:30.807 に答える
0

link_id 列にインデックスがあることを確認してください。一度に 10.000 のようなチャンクで削除してみてください。テーブルからの削除は非常にコストのかかる操作です。

于 2012-05-18T22:10:40.287 に答える