Mam stolik
| base_schedule_line_items | UTWÓRZ TABELĘ
base_schedule_line_items
(
id
int (10) unsigned NOT NULL AUTO_INCREMENT,
installment
int (10) unsigned NOT NULL,
on_date
data NOT NULL,
actual_date
data DEFAULT NULL,
payment_type
int (11) NOT NULL,
scheduled_principal_outstanding
dziesiętny (65,0) NOT NULL,
scheduled_principal_due
dziesiętny (65,0) NOT NULL,
scheduled_interest_outstanding
dziesiętny (65,0) NOT NULL,
scheduled_interest_due
dziesiętny (65,0) NOT NULL,
currency
int (11) NOT NULL,
updated_at
data / godzina NOT NULL DEFAULT '2013-01-06 14:29:16', data / godzina
created_at
NOT 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
),
KLUCZindex_bslt_lending
(lending_id
)
KLUCZindex_bslt_actualdate
(actual_date
)
KLUCZindex_bslt_spsila
(loan_base_schedule_id
,scheduled_principal_due
,scheduled_interest_due
,actual_date
)
KLUCZindex_bslt_ondate
(on_date
)
KLUCZindex_bslt_oa
(on_date
,actual_date
)
KLUCZindex_bslt_ol
(on_date
,loan_base_schedule_id
)
KLUCZindex_bslt_oli
(on_date
,lending_id
)
) Silnik = InnoDB AUTO_INCREMENT = 30410126 Domyślnym zestawem = utf8 |
Teraz ta tabela zawiera 30 milionów rekordów, muszę dodać do tego jeszcze dwa indeksy i dodawanie go zajmuje lata.
zmień tabelę base_schedule_line_items dodaj indeks index_bslt_sla (zaplanowana_principal_due, faktyczna_data, lending_id);
zmień tabelę base_schedule_line_items dodaj indeks index_bslt_ssla (zaplanowana_principal_due, zaplanowana_interes_due, lending_id, faktyczna_data);
Użyłem poniższego zapytania, aby znaleźć rozmiar tabeli
WYBIERZ nazwę_tabeli AS „Tabele”, okrągłe (((długość_danych + długość_indeksu) / 1024/1024), 2) „Rozmiar w MB” OD schematu_informacyjnego.TABLES GDZIE tabela_schema = „moja_nazwa_bazy_danych”;
Wynik wyszedł jako
base_schedule_line_items | 20111,00
Użyłem tego tylko do obliczenia długości danych i pominąłem długość indeksu
WYBIERZ nazwę_tabeli AS „Tabele”, okrągłe (((długość_danych) / 1024/1024), 2) „Rozmiar w MB” OD schematu_informacyjnego.TABLES GDZIE schemat_tabeli = „moja_nazwa_bazy_danych”;
i wynik był
base_schedule_line_items | 9497,00
Indeksy
KLUCZ index_bslt_actualdate (actual_date)
index_bslt_spsila KLUCZ (loan_base_schedule_id, scheduled_principal_due, scheduled_interest_due, actual_date)
KLUCZ index_bslt_ondate (on_date)
KLUCZ index_bslt_oa (on_date, actual_date)
KLUCZ index_bslt_ol (on_date, loan_base_schedule_id)
KLUCZ index_bslt_oli (on_date, lending_id)
zostały dodane przeze mnie, ale nie jestem pewien, do jakiego celu zostały dodane inne wskaźniki. To dość duża aplikacja. Teraz muszę dodać te dwa wyżej wymienione wskaźniki, ponieważ pomagają mi one wyodrębnić raport przy użyciu instrukcji select i bardzo trudno jest je dodać. Każda pomoc byłaby bardzo mile widziana
źródło