Saya punya meja
| base_schedule_line_items | CREATE TABLE
base_schedule_line_items
(
id
int (10) unsigned NOT NULL AUTO_INCREMENT,
installment
int (10) unsigned NOT NULL,
on_date
tanggal NOT NULL,
actual_date
tanggal DEFAULT NULL,
payment_type
int (11) NOT NULL,
scheduled_principal_outstanding
desimal (65,0) NOT NULL,
scheduled_principal_due
decimal (65,0) BUKAN NULL,
scheduled_interest_outstanding
desimal (65,0) BUKAN NULL,
scheduled_interest_due
desimal (65,0) BUKAN NULL,
currency
int (11) BUKAN NULL,
updated_at
datetime BUKAN NULL DEFAULT '2013-01-06 14:29:16',
created_at
datetime BUKAN NULL DEFAULT ' 2013-01-06 14:29:16 ',
loan_base_schedule_id
int (10) unsigned NOT NULL,
lending_id
int (10) unsigned NOT NULL,
reschedule
tinyint (1) DEFAULT' 0 ',
PRIMARY KEY (id
),
KEYindex_base_schedule_line_items_loan_base_schedule
(loan_base_schedule_id
), KEYindex_bslt_spd
(scheduled_principal_due
), KEY ( ),
KEYindex_bslt_lending
(lending_id
),
KUNCIindex_bslt_actualdate
(actual_date
),
KEYindex_bslt_spsila
(loan_base_schedule_id
,scheduled_principal_due
,scheduled_interest_due
,actual_date
),
KEYindex_bslt_ondate
(on_date
),
KEYindex_bslt_oa
(on_date
,actual_date
),
KEYindex_bslt_ol
(on_date
,loan_base_schedule_id
),
KEYindex_bslt_oli
(on_date
,lending_id
)
) ENGINE = InnoDB AUTO_INCREMENT = 30.410.126 DEFAULT CHARSET = utf8 |
Sekarang tabel ini memiliki 30 juta catatan di dalamnya, saya perlu menambahkan dua indeks lagi untuk ini dan sepertinya butuh bertahun-tahun untuk menambahkannya.
ubah tabel base_schedule_line_items tambahkan indeks index_bslt_sla (dijadwalkan_principal_due, actual_date, lending_id);
ubah tabel base_schedule_line_items tambahkan indeks index_bslt_ssla (dijadwalkan_principal_due, terjadwal_interest_due, lending_id, actual_date);
Saya menggunakan query yang disebutkan di bawah ini untuk mengetahui ukuran tabel
SELECT table_name AS "Tables", round ((((data_length + index_length) / 1024/1024), 2) "Ukuran dalam MB" FROM information_schema.TABLES WHERE table_schema = "my_database_name";
Hasilnya keluar sebagai
base_schedule_line_items | 20111.00
Saya menggunakan ini hanya untuk menghitung panjang data dan meninggalkan panjang indeks
SELECT table_name AS "Tables", round ((((data_length) / 1024/1024), 2) "Ukuran dalam MB" FROM information_schema.TABLES WHERE table_schema = "my_database_name";
dan hasilnya
base_schedule_line_items | 9497.00
Indeks
KEY index_bslt_actualdate (actual_date),
KEY index_bslt_spsila (loan_base_schedule_id, dijadwalkan_principal_due, terjadwal_interest_due, aktual_date),
KEY index_bslt_ondate (on_date),
KEY index_bslt_dapatditangguhkan, dengan _dapatkan_dapatdibandingkan dengan_data_data_Kunci_ditanggal, dengan
KEY index_bslt_document , KEY index_bslt_document , KEY index_bslt_date_date , KEY index_bslt_document, ke_pengaturan_dana_delanjakan_dua hari_dua hari,
KEY index_bslt_do
ditambahkan oleh saya, tetapi saya tidak yakin atau untuk apa indeks lain ditambahkan. Ini aplikasi yang cukup besar. Sekarang saya perlu menambahkan dua indeks yang disebutkan di atas karena mereka membantu saya mengekstraksi laporan menggunakan pernyataan pilih dan saya merasa sangat sulit untuk menambahkannya. Bantuan apa pun akan sangat dihargai