Продолжительность SQL-запроса больше для меньшего набора данных? - PullRequest
3 голосов
/ 20 апреля 2010

Я получил сообщения о том, что приложение для создания отчетов не работает. После первоначального расследования я обнаружил, что время транзакции SQL истекло. Я озадачен тем, почему запрос для меньшего выбора элементов может занять намного больше времени, чтобы вернуть результаты.

Быстрый запрос (в среднем 4 секунды для возврата):

SELECT * FROM Payroll WHERE LINEDATE >= '04-17-2010'AND LINEDATE <= '04-24-2010' ORDER BY 'EMPLYEE_NUM' ASC, 'OP_CODE' ASC, 'LINEDATE' ASC

Длинный запрос (в среднем 1 минута 20 секунд для возврата):

SELECT * FROM Payroll WHERE LINEDATE >= '04-18-2010'AND LINEDATE <= '04-24-2010' ORDER BY 'EMPLYEE_NUM' ASC, 'OP_CODE' ASC, 'LINEDATE' ASC

Я мог бы просто увеличить время ожидания для SqlCommand, но это не меняет того факта, что запрос занимает больше времени, чем должно.

Почему запрос подмножества элементов занимает больше времени, чем запрос, который возвращает больше данных? Как я могу оптимизировать этот запрос?

Ответы [ 2 ]

2 голосов
/ 20 апреля 2010

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

По многим причинам обход индекса может занять больше времени, чем сканирование таблицы.

Например, вполне вероятно, что сама таблица полностью помещается в кеш, но не в таблицу и индекс одновременно.

0 голосов
/ 20 апреля 2010

Кроме отсутствия индекса в столбце LINEDATE.Это зависит от того, на каком сервере базы данных вы используете некоторые статистические данные, которые влияют на план запросов для оптимизации доступа.

Для Informix ig вы должны сделать UPDATE STATISTICS оценку.И вы можете проверить затраты в плане запроса, используя SET EXPLAIN ON.

. Вы должны проверить свою документацию на похожие заявления.

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