У меня есть пример вопроса для запроса на обновление и индекса БД - PullRequest
0 голосов
/ 30 марта 2020

У меня есть пример запроса на обновление.

update appianData.IC_MST_CodeDateData
    left join appianData.IC_MST_Velocity
    on IC_MST_CodeDateData.whse = IC_MST_Velocity.whse and IC_MST_CodeDateData.article = IC_MST_Velocity.article
    set IC_MST_CodeDateData.velocity = IC_MST_Velocity.velocity;

Иногда этот запрос истекает, а иногда он выполняется только через 3 секунды, совершенно случайно.

Поэтому, когда я проверяю индекс для таблицы IC_MST_CodeDateData и IC_MST_Velocity , IC_MST_CodeDateData имеет составной индекс (столбец whse + статья столбца), а IC_MST_Velocity имеет два отдельных индекса (столбец whse и статья столбца

).

Это причина того, что этот запрос иногда прерывается, а иногда завершается за 3 секунды?

1 Ответ

0 голосов
/ 30 марта 2020

Поиск производится по таблице IC_MST_Velocity с использованием столбцов whse и article. Но:

  • С двумя отдельными индексами MySQL выполнит сканирование диапазона индексов шириной , используя один индекс и отфильтровав столбцы. Не оптимально для обновления.

  • С составным индексом MySQL выполнит узкое сканирование диапазона индекса для составного индекса. Гораздо быстрее для обновления, так как нужно пройти намного меньше строк.

Поэтому вы должны попытаться создать индекс:

create index ix1 on IC_MST_Velocity (whse, article);

Если вы действительно хотите больше Обновите производительность и даже включите в нее извлеченные столбцы, чтобы создать так называемый индекс покрытия . Например:

create index ix1 on IC_MST_Velocity (whse, article, velocity);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...