ragnar_ok
@ragnar_ok

Как оптимизировать сортировку по полю внешней таблицы?

Привет!

Есть таблица, которая хранит компании:
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
  • Вопрос задан
  • 117 просмотров
Решения вопроса 1
Stalker_RED
@Stalker_RED
Создайте композитный индекс в котором оба поля и пользующихся в запросе.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы