Ok ternyata masalah ini lebih dari sekadar membuat tabel sederhana, mengindeksnya dan melupakan masalah :) Inilah yang saya lakukan untuk berjaga-jaga jika orang lain menghadapi masalah yang sama (Saya telah menggunakan contoh Alamat IP tetapi berfungsi untuk yang lain tipe data juga):
Masalah:Tabel Anda memiliki jutaan entri dan Anda perlu menambahkan indeks dengan sangat cepat
Kasus Penggunaan: Pertimbangkan untuk menyimpan jutaan alamat IP dalam tabel pencarian. Menambahkan alamat IP seharusnya tidak menjadi masalah besar tetapi membuat indeks pada alamat tersebut membutuhkan waktu lebih dari 14 jam.
Solusi :Partisi tabel Anda menggunakan Partitionin MySQL g strategi
Kasus #1:Saat tabel yang Anda inginkan belum dibuat
CREATE TABLE IPADDRESSES(
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
ipaddress BIGINT UNSIGNED,
PRIMARY KEY(id, ipaddress)
) ENGINE=MYISAM
PARTITION BY HASH(ipaddress)
PARTITIONS 20;
Kasus #2:Saat tabel yang Anda inginkan sudah dibuat. Tampaknya ada cara untuk menggunakan ALTER TABLE untuk melakukan ini, tetapi saya belum menemukan solusi yang tepat untuk ini. Sebaliknya, ada solusi yang sedikit tidak efisien:
CREATE TABLE IPADDRESSES_TEMP(
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
ipaddress BIGINT UNSIGNED,
PRIMARY KEY(id)
) ENGINE=MYISAM;
Masukkan alamat IP Anda ke dalam tabel ini. Dan kemudian buat tabel sebenarnya dengan partisi:
CREATE TABLE IPADDRESSES(
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
ipaddress BIGINT UNSIGNED,
PRIMARY KEY(id, ipaddress)
) ENGINE=MYISAM
PARTITION BY HASH(ipaddress)
PARTITIONS 20;
Dan akhirnya
INSERT INTO IPADDRESSES(ipaddress) SELECT ipaddress FROM IPADDRESSES_TEMP;
DROP TABLE IPADDRESSES_TEMP;
ALTER TABLE IPADDRESSES ADD INDEX(ipaddress)
Dan begitulah... pengindeksan pada tabel baru membutuhkan waktu sekitar 2 jam pada mesin 3.2GHz dengan RAM 1GB :) Semoga ini bisa membantu.