Привет!
Есть таблица, которая хранит компании:
create table companies
(
ID int(11) unsigned auto_increment primary key,
IS_EXIST tinyint(1) unsigned,
);
Есть таблица, которая хранит некую дополнительную информацию об этой компании:
create table companies_settings
(
ID int(11) unsigned auto_increment primary key,
NAME text null,
COMPANY_ID int(18) null,
);
Нужно выбрать из companies_settings поле id и сортировать по полю
companies.IS_EXIST:
SELECT *
FROM companies_settings
INNER JOIN companies ON companies_settings.COMPANY_ID = companies.ID
ORDER BY companies.IS_EXIST;
Создал индексы по
companies.IS_EXIST ("is_exist") и
companies_settings.COMPANY_ID ("companies").
Вне зависимости от наличия этих индексов скорость выполнения не меняется. EXPLAIN говорит, что:
1. possible_keys — companies, но при этом key — null;
2. в столбце "extra" EXPLAIN — Using temporary; Using filesort.
Насколько я понял, то Using filesort означает, что индекс по is_exist не используется
1,SIMPLE,companies_settings,NULL,ALL,companies,NULL,NULL,NULL,213950,100,Using where; Using temporary; Using filesort
1,SIMPLE,companies,NULL,eq_ref,PRIMARY,PRIMARY,4,companies_settings.company_id,1,100,Using where
spoilerСмотрю на колонку Duration / Fetch MySQL Workbench. Без join 0,320 sec, а с join 1,139 sec.
MySQL 5.7.35-38