MySQLはまだこの方法でインデックスを処理しますか?


8

MySQLで重複したインデックスを削除するのにはかなり時間がかかりました。そのため、私が待っていたときにそれについて検索し、MySQLがどのように処理し、インデックスを作成するかについて話している2006年のこの投稿を見つけました。ADDDROP

テーブルTが4つのインデックス(ndx1、ndx2、ndx3、ndx4)を持つMySQLテーブルであり、「テーブルTをドロップインデックスndx3に変更」したい場合。ここでは、内部で何が起こるかを正確に示します。

1)MySQLはT.MYDを一時テーブル、つまりS.MYDとゼロバイトのS.MYIにコピーします。2)MySQLは「テーブルSを変更し、インデックスndx1(...)を追加します。3)MySQLは「テーブルSを変更し、インデックスndx2(...); 4)MySQLはテーブルSを変更し、インデックスndx4(...)を追加します。5)MySQLはT.MYDを削除してT.MYIを削除します6)MySQLはS.MYDをT.MYDに名前変更し、S.MYIをT.MYIに名前変更します

これはまだ本当ですか?彼のアドバイスはまだ有効ですか?

同じMyISAMテーブルTに4つのインデックス(ndx1、ndx2、ndx3、ndx4)があり、「テーブルTドロップインデックスndx3を変更する」とします。代わりにこれを試してください:

1)TのようなテーブルT1を作成します。これにより、ndx1、ndx2、ndx3、およびndx4のインデックスを持つ空のテーブルT1が作成されます。2)テーブルT1ドロップインデックスndx3を変更します。これにより、空であるT1のインデックスndx3が削除されます。3)T1に挿入* Tから選択します。これにより、テーブルTにデータが読み込まれ、T1の3つすべてのインデックスが1つのパスで読み込まれます。4)ドロップテーブルテーブルT; 5)テーブルT1の名前をTに変更します。

大きなテーブルでのインデックスの追加と削除をどのように処理しますか?

回答:


14

これはMySQL 4.xがこれを行った方法であり、かつては私をひどく短縮していた。

実際、そのようなインデックス操作がいくつ必要かを計算した式がありました。

Table with 0 indexes and adding 1 index tooks 1 temp table
Table with 1 index   and adding 1 index tooks 3 temp tables
Table with 2 indexes and adding 1 index tooks 6 temp tables
Table with 3 indexes and adding 1 index tooks 10 temp tables (I had eyewitnessed this !!!)
.
.
.
Table with n indexes and adding 1 index took (n + 1) X (n + 2) / 2 temp tables
.
.
.
Table with 16 indexes and adding 1 index took 153 temp tables

良い知らせ、MySQL 5.xはそれをしません!!!

MySQL 5.xがこれを実行した場合、私は今日PostgreSQL DBAになります(PostgreSQLに不快感はありません。それ自体が優れたRDBMSです)。

更新

ああ、私は投稿を読みました!!! その投稿は私から来ました !!!

誰かがこの投稿を掘り起こすとは思いもしませんでした。

このようなものは死んで埋葬しておいてください。現在、フラッシュバックがあります!!!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.