У меня есть оператор выбора, который занимает некоторое время (очень много времени) для завершения MySQL.Все таблицы "MyISAM".Версия MySQL 5.6.41.
У меня есть три таблицы
- таблица 1: 50000 строк
- таблица 2: 7500000 строк (7,5 ГБ)
- таблица 3: 250 000 000 строк (17,5 ГБ)
Я выполняю оператор выбора с левыми объединениями в таблице.
select `table1`.*
from `table1`
inner join `table2` on `table2`.`table1_id` = `table1`.`id`
inner join `table3` on `table3`.`table2_id` = `table2`.`id`
where `table1`.`id` = "2" and `table3`.`parameter` = 'param'
столбцы "id"к первичным ключам и столбцу «параметр» применен индекс
Код текущей таблицы
CREATE TABLE `table1` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`),
INDEX `id` (`id`),
)
COLLATE='utf8_unicode_ci'
ENGINE=MyISAM;
CREATE TABLE `table2` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`table1_id` INT(10) UNSIGNED NOT NULL,
PRIMARY KEY (`id`),
INDEX `id` (`id`),
INDEX `table1_id_index` (`table1_id`),
)
COLLATE='utf8_unicode_ci'
ENGINE=MyISAM;
CREATE TABLE `table3` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`table2_id` INT(10) UNSIGNED NOT NULL,
`parameter` VARCHAR(255) NOT NULL COLLATE 'utf8_unicode_ci',
PRIMARY KEY (`id`),
INDEX `id` (`id`),
INDEX `id` (`parameter`),
INDEX `table2_id_index` (`table1_id`),
)
COLLATE='utf8_unicode_ci'
ENGINE=MyISAM;
Странно то, что когда я переписываю запрос другим способом, у меня естьнет проблем с производительностью:
select `table1`.*
from `table3`
inner join `table2` on `table3`.`table2_id` = `table2`.`id`
inner join `table1` on `table2`.`table1_id` = `table1`.`id`
where `table1`.`id` = "2" and `table3`.`parameter` = 'param'