Apakah MySQL masih menangani indeks dengan cara ini?

8

Menjatuhkan indeks rangkap di MySQL memakan waktu agak lama, jadi ketika saya sedang menunggu saya mencari tentang hal itu & menemukan posting ini dari 2006, berbicara tentang bagaimana MySQL menangani ADDdan DROPmengindeks.

Jika tabel T adalah tabel MySQL yang memiliki empat indeks (ndx1, ndx2, ndx3, ndx4) dan Anda ingin 'mengubah tabel T drop index ndx3;' di sini persis apa yang terjadi di bawah tenda:

1) MySQL menyalin T.MYD ke tabel temp, yaitu S.MYD dan S.MYI byte nol. 2) MySQL tidak mengubah tabel S tambahkan indeks ndx1 (...); 3) MySQL tidak mengubah tabel S tambahkan indeks ndx2 (...); 4) MySQL tidak mengubah tabel S tambahkan indeks ndx4 (...); 5) MySQL menghapus T.MYD dan menghapus T.MYI 6) MySQL mengganti nama S.MYD menjadi T.MYD, dan mengubah nama S.MYI menjadi T.MYI

Apakah ini masih benar? Apakah nasihatnya masih berlaku?

Diberikan tabel MyISAM yang sama T yang memiliki empat indeks (ndx1, ndx2, ndx3, ndx4) dan Anda ingin 'mengubah tabel T drop index ndx3;' coba ini sebagai gantinya:

1) buat tabel T1 seperti T; Ini menciptakan tabel kosong T1 dengan indeks ndx1, ndx2, ndx3 dan ndx4. 2) mengubah tabel T1 drop index ndx3; Ini menjatuhkan indeks ndx3 pada T1 kosong, yang seharusnya instan. 3) masukkan ke T1 pilih * dari T; Ini akan mengisi tabel T dan memuat ketiga (3) indeks untuk T1 dalam satu pass. 4) drop table table T; 5) ubah tabel T1 ganti nama menjadi T;

Bagaimana Anda menangani semua penambahan dan penghapusan indeks dari tabel besar?

JIStone
sumber

Jawaban:

14

Beginilah cara MySQL 4.x melakukan ini dan ini digunakan untuk memperburuk saya.

Faktanya, ada rumus yang saya hitung tentang berapa banyak manuver indeks yang dibutuhkan

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

Kabar Baik, MySQL 5.x tidak melakukan itu !!!

Jika MySQL 5.x melakukan ini, saya akan menjadi DBA PostgreSQL hari ini (Jangan tersinggung oleh PostgreSQL, itu adalah RDBMS yang sangat baik dalam dirinya sendiri).

MEMPERBARUI

Ya ampun, saya membaca posting !!! Posting itu datang dari saya !!!

Saya tidak pernah berpikir seseorang akan menggali posting ini.

Tolong tinggalkan barang-barang seperti ini mati dan dikuburkan. Sekarang saya mengalami kilas balik !!!

RolandoMySQLDBA
sumber