J'ai une table
| base_schedule_line_items | CREATE TABLE
base_schedule_line_items(
idint (10) unsigned NOT NULL AUTO_INCREMENT,
installmentint (10) unsigned NOT NULL,
on_datedate NOT NULL,
actual_datedate DEFAULT NULL,
payment_typeint (11) NOT NULL,
scheduled_principal_outstandingdecimal (65,0) NOT NULL,
scheduled_principal_duedecimal (65,0) NOT NULL,
scheduled_interest_outstandingdecimal (65,0) NOT NULL,
scheduled_interest_duedecimal (65,0) NOT NULL,
currencyint (11) NOT NULL,
updated_atdatetime NOT NULL DEFAULT '2013-01-06 14:29:16',
created_atdatetime NOT NULL DEFAULT ' 2013-01-06 14:29:16 ',
loan_base_schedule_idint (10) unsigned NOT NULL,
lending_idint (10) unsigned NOT NULL,
rescheduletinyint (1) DEFAULT' 0 ',
PRIMARY KEY (id),
KEYindex_base_schedule_line_items_loan_base_schedule(loan_base_schedule_id), KEYindex_bslt_spd(scheduled_principal_due),
CLÉindex_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)
) MOTEUR = InnoDB AUTO_INCREMENT = 30410126 DEFAULT charset = UTF8 |
Maintenant que cette table contient 30 millions d'enregistrements, j'ai besoin d'ajouter deux index supplémentaires à cela et il faut des années pour l'ajouter.
modifier la table base_schedule_line_items add index index_bslt_sla (schedule_principal_due, actual_date, lending_id);
modifier la table base_schedule_line_items add index index_bslt_ssla (schedule_principal_due, schedule_interest_due, lending_id, actual_date);
J'ai utilisé la requête mentionnée ci-dessous pour connaître la taille de la table
SELECT table_name AS "Tables", round (((data_length + index_length) / 1024/1024), 2) "Size in MB" FROM information_schema.TABLES WHERE table_schema = "my_database_name";
Le résultat est sorti comme
base_schedule_line_items | 20111.00
Je l'ai utilisé juste pour calculer la longueur des données et la longueur d'index omise
SELECT table_name AS "Tables", round (((data_length) / 1024/1024), 2) "Size in MB" FROM information_schema.TABLES WHERE table_schema = "my_database_name";
et le résultat était
base_schedule_line_items | 9497,00
Les index
Index_bslt_actualdate KEY (actual_date),
KEY index_bslt_spsila (loan_base_schedule_id, scheduled_principal_due, scheduled_interest_due, actual_date),
index_bslt_ondate KEY (on_date),
index_bslt_oa KEY (on_date, actual_date),
KEY index_bslt_ol (on_date, loan_base_schedule_id),
KEY index_bslt_oli (on_date, lending_id)
ont été ajoutés par moi, mais je ne sais pas trop dans quel but d'autres indices ont été ajoutés. Il s'agit d'une application assez importante. Maintenant, je dois ajouter ces deux indices mentionnés ci-dessus car ils m'aident à extraire un rapport à l'aide d'une instruction select et je trouve qu'il est très difficile de les ajouter. Toute aide serait grandement appréciée