Почему этот SQL-запрос Azure чрезвычайно медленный? - PullRequest
0 голосов
/ 18 мая 2018

У меня есть небольшая таблица с примерно 1 миллионом строк, и я выполняю следующий запрос к ней.

SELECT *
FROM TillBasicData
WHERE companyid = 'BE_AA'
AND languagecode = 'eng'
AND noos14 LIKE '%09258384374953%';
--09258384374953,09258387354952

Проблема в том, что выполнение занимает около 1 минуты.

Я добавил следующий индекс, чтобы попытаться ускорить процесс

CREATE INDEX IX_TillBasicData
    ON dbo.tillbasicdata (companyid DESC, languagecode DESC, noos14 DESC);

Это немного помогает и сокращает его до 30 секунд, но я до сих пор не понимаю, почему это занимает так много времени, я могу только предположить,это связано с оператором LIKE, но что я могу сделать, чтобы ускорить процесс?

В такой маленькой таблице я бы предположил, что запрос будет выполнен менее чем за 1 секунду.

1 Ответ

0 голосов
/ 18 мая 2018

Здесь есть несколько проблем:

  • Неизвестное количество столбцов, которые вы выбираете из таблицы
  • Как вы сказали, LIKE оператор.

Чтобы провести надлежащий анализ, было бы лучше увидеть план выполнения, но это довольно распространенная проблема, поэтому я бы сказал, что может произойти две вещи:

  • Полныйсканирование таблицы на основе вашего состояния
  • Поиск некластеризованного индекса на основе companyid и languagecode и предикат фильтра на основе noos14 и оператор поиска ключа, который извлекает все другие столбцы из таблицы, которые не находятся вindex.

Таким образом, чтобы решить вашу проблему, просто измените индекс, включив в него все необходимые столбцы, и замените SELECT * явным списком необходимых столбцов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...