Masam var
| base_schedule_line_items | CREATE TABLE
base_schedule_line_items
(
id
int (10) imzasız NOT NULL AUTO_INCREMENT,
installment
int (10) imzasız NOT NULL,
on_date
tarih NULL DEĞİL,
actual_date
tarih DEFAULT NULL,
payment_type
int (11) NULL DEĞİL,
scheduled_principal_outstanding
ondalık (65,0) NULL DEĞİL,
scheduled_principal_due
ondalık (65,0) NULL DEĞİL,
scheduled_interest_outstanding
ondalık (65,0) NULL DEĞİL,
scheduled_interest_due
ondalık (65,0) NULL DEĞİL,
currency
int (11) NULL DEĞİL,
updated_at
datetime NOT NULL DEFAULT '2013-01-06 14:29:16',
created_at
datetime NULL DEFAULT ' 2013-01-06 14:29:16 ',
loan_base_schedule_id
int (10) imzasız NOT NULL,
lending_id
int (10) imzasız NOT NULL,
reschedule
tinyint (1) VARSAYILAN' 0 ',
PRIMARY KEY (id
),
KEYindex_base_schedule_line_items_loan_base_schedule
(loan_base_schedule_id
), KEYindex_bslt_spd
(scheduled_principal_due
),
ANAHTARindex_bslt_lending
(lending_id
),
Anahtarindex_bslt_actualdate
(actual_date
),
anahtarindex_bslt_spsila
(loan_base_schedule_id
,scheduled_principal_due
,scheduled_interest_due
,actual_date
),
anahtarindex_bslt_ondate
(on_date
),
anahtarindex_bslt_oa
(on_date
,actual_date
),
anahtarindex_bslt_ol
(on_date
,loan_base_schedule_id
),
anahtarindex_bslt_oli
(on_date
,lending_id
)
) MOTOR = InnoDB'nin AUTO_INCREMENT = 30.410.126 öntanımlı karakter kümesi = UTF-8 |
Şimdi bu tabloda 30 milyon kayıt var, buna iki dizin daha eklemeliyim ve eklemesi yıllar alıyor.
alter tablosu base_schedule_line_items dizin ekle index_bslt_sla (zamanlanmış_principal_due, actual_date, lending_id);
alter tablosu base_schedule_line_items dizin ekle index_bslt_ssla (zamanlanmış_principal_due, zamanlanmış_görev_deri, borç verme_kimliği, gerçek_tarih);
Tablo boyutunu bulmak için aşağıda belirtilen sorguyu kullandım
SEÇİN tablo_adı AS "Tablolar", yuvarlak (((data_length + index_length) / 1024/1024), 2) "MB cinsinden boyut" FROM information_schema.TABLES WHERE table_schema = "my_database_name";
Sonuç şu şekilde çıktı:
base_schedule_line_items | 20.111,00
Bunu sadece veri uzunluğunu hesaplamak için kullandım ve dizin uzunluğunu dışladım
Table_name AS "Tablolar", yuvarlak (((data_length) / 1024/1024), 2) "MB cinsinden boyut" FROM information_schema.TABLES WHERE table_schema = "my_database_name";
ve sonuç şuydu
base_schedule_line_items | 9.497,00
Endeksler
ANAHTAR index_bslt_actualdate (actual_date),
anahtar index_bslt_spsila (loan_base_schedule_id, scheduled_principal_due, scheduled_interest_due, actual_date),
anahtar index_bslt_ondate (ON_DATE),
anahtar index_bslt_oa (ON_DATE, actual_date),
anahtar index_bslt_ol (ON_DATE, loan_base_schedule_id),
anahtar index_bslt_oli (ON_DATE, lending_id)
benim tarafımdan eklendi, ancak ben emin değilim ya da başka endeksler için hangi amaçla eklendi. Bu oldukça büyük bir uygulamadır. Şimdi bir select deyimi kullanarak bir rapor ayıklama yardımcı ve onları eklemek çok zor buluyorum gibi yukarıda belirtilen iki endeks eklemeniz gerekir. Herhangi bir yardım çok takdir edilecektir