Eu tenho uma mesa
| base_schedule_line_items | CREATE TABLE
base_schedule_line_items
(
id
int (10) não assinado NOT NULL AUTO_INCREMENT,
installment
int (10) não assinado NOT NULL,
on_date
data NOT NULL,
actual_date
data DEFAULT NULL,
payment_type
int (11) NOT NULL,
scheduled_principal_outstanding
decimal (65,0) NOT NULL,
scheduled_principal_due
decimal (65,0) NOT NULL,
scheduled_interest_outstanding
decimal (65,0) NOT NULL,
scheduled_interest_due
decimal (65,0) NOT NULL,
currency
int (11) NOT NULL,
updated_at
datetime NOT NULL DEFAULT '2013-01-06 14:29:16',
created_at
datetime 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) PADRÃO' 0 ',
PRIMARY KEY (id
),
KEYindex_base_schedule_line_items_loan_base_schedule
(loan_base_schedule_id
), KEYindex_bslt_spd
(scheduled_principal_due
),
KEYindex_bslt_lending
(lending_id
),
KEYindex_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 = 30410126 PADRÃO charset = UTF-8 |
Agora, esta tabela possui 30 milhões de registros, preciso adicionar mais dois índices a isso e é como se demorasse anos para adicioná-lo.
alter table base_schedule_line_items adiciona índice index_bslt_sla (data_principal_programada, data_atual, id_de_prestação);
alterar tabela base_schedule_line_items adicionar índice index_bslt_ssla (data_principal_programada, data_processo_interessante, data_de_prestação, data_idual);
Eu usei a consulta abaixo mencionada para descobrir o tamanho da tabela
SELECT table_name AS "Tables", round (((data_length + index_length) / 1024/1024), 2) "Tamanho em MB" FROM information_schema.TABLES WHERE table_schema = "my_database_name";
O resultado saiu como
base_schedule_line_items | 20111.00
Eu usei isso apenas para calcular o comprimento dos dados e deixei de fora o comprimento do índice
SELECT table_name AS "Tables", round (((data_length) / 1024/1024), 2) "Tamanho em MB" FROM information_schema.TABLES WHERE table_schema = "my_database_name";
e o resultado foi
base_schedule_line_items | 9497,00
Os índices
Index_bslt_actualdate CHAVE (actual_date),
index_bslt_spsila CHAVE (loan_base_schedule_id, scheduled_principal_due, scheduled_interest_due, actual_date),
CHAVE index_bslt_ondate (on_date),
CHAVE index_bslt_oa (on_date, actual_date),
CHAVE index_bslt_ol (on_date, loan_base_schedule_id),
index_bslt_oli CHAVE (on_date, lending_id)
foram adicionados por mim, mas não tenho certeza ou para qual finalidade outros índices foram adicionados. Esta é uma aplicação bastante grande. Agora, preciso adicionar esses dois índices mencionados acima, pois eles me ajudam a extrair um relatório usando uma instrução select e acho muito difícil adicioná-los. Qualquer ajuda seria muito apreciada
fonte