У меня есть стол
| base_schedule_line_items | CREATE TABLE
base_schedule_line_items
(
id
int (10) без знака NOT NULL AUTO_INCREMENT,
installment
int (10) без знака NOT NULL,
on_date
дата NOT NULL,
actual_date
дата DEFAULT NULL,
payment_type
int (11) NOT NULL,
scheduled_principal_outstanding
десятичный (65,0) NOT NULL,
scheduled_principal_due
десятичный (65,0) NOT NULL,
scheduled_interest_outstanding
десятичный (65,0) NOT NULL,
scheduled_interest_due
десятичный (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) без знака NOT NULL,
lending_id
int (10) без знака NOT NULL,
reschedule
tinyint (1) ПО УМОЛЧАНИЮ' 0 ',
PRIMARY KEY (id
),
KEYindex_base_schedule_line_items_loan_base_schedule
(loan_base_schedule_id
), KEYindex_bslt_spd
(scheduled_principal_due
),
КЛЮЧ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
)
) ENGINE = InnoDB AUTO_INCREMENT = 30410126 DEFAULT CHARSET = utf8 |
Теперь в этой таблице 30 миллионов записей, мне нужно добавить к ней еще два индекса, и для ее добавления требуются годы.
изменить таблицу base_schedule_line_items добавить индекс index_bslt_sla (schedule_principal_due, actual_date, lending_id);
изменить таблицу base_schedule_line_items добавить индекс index_bslt_ssla (schedule_principal_due, schedule_interest_due, lending_id, actual_date);
Я использовал приведенный ниже запрос, чтобы узнать размер таблицы
ВЫБЕРИТЕ имя_таблицы AS "Таблицы", круглое (((data_length + index_length) / 1024/1024), 2) "Размер в мегабайтах" FROM information_schema.TABLES WHERE table_schema = "my_database_name";
Результат получился как
base_schedule_line_items | 20111,00
Я использовал это только для вычисления длины данных и опущенной длины индекса
ВЫБЕРИТЕ имя_таблицы AS "Tables", round (((data_length) / 1024/1024), 2) "Размер в мегабайтах" FROM information_schema.TABLES WHERE table_schema = "my_database_name";
и результат был
base_schedule_line_items | 9497,00
Индексы
КЛЮЧ index_bslt_actualdate (actual_date),
КЛЮЧ index_bslt_spsila (loan_base_schedule_id, scheduled_principal_due, scheduled_interest_due, actual_date),
КЛЮЧ index_bslt_ondate (on_date),
КЛЮЧ index_bslt_oa (on_date, actual_date),
КЛЮЧ index_bslt_ol (on_date, loan_base_schedule_id),
КЛЮЧ index_bslt_oli (on_date, lending_id)
были добавлены мной, но я не уверен, или для какой цели были добавлены другие индексы. Это довольно большое приложение. Теперь мне нужно добавить эти два индекса, упомянутые выше, поскольку они помогают мне извлечь отчет с помощью оператора select, и мне очень трудно добавить их. Любая помощь будет принята с благодарностью
источник