У меня есть таблица, которая содержит данные для нескольких арендаторов.
CREATE TABLE `accountPost` (
`id` bigint(11) unsigned NOT NULL AUTO_INCREMENT,
`tenantId` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT '',
`accountId` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '',
`scheduledTime` BIGINT(19),
......more columns
PRIMARY KEY (`id`),
) ENGINE=InnoDB AUTO_INCREMENT=781625 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
Здесь scheduleTime - это отметка времени. tenantId будет общим для множества строк accountPost.
Теперь у меня есть запрос типа
select * from accountPost
where scheduledTime > t1
and scheduledTime < t2
and tenantId = "x";
Для этого запроса я хочу создать составной индекс.
1. ALTER TABLE `accountPost` ADD INDEX `idx1` (`scheduledTime`, `tenantId`);
2. ALTER TABLE `accountPost` ADD INDEX `idx1` (`tenantId`, `scheduledTime`);
Какой из этих двух я должен использовать, чтобы получить оптимальную производительность для вставки, а также чтения и почему? Нужно ли добавлять более частый столбец первым в составном индексе?