Оптимизация запроса с Датой


3 0

Вчера на работе в основном занимался тестированием сайта через различные прокси и оптимизацией запросов. Перед самым новым годом работы нет, поэтому подчищаем сайт.

Один из запросов выполнялся 20 и более минут, хотя на все поля, по которым происходит поиск индексы есть. Даже не смотря на то, что одна из таблиц оооооччччень громадная, запрос не должен работать так долго. Это просто нереально.

Запрос искал транзакции для людей по определенной дате. Причем дату искали следующим спомобом:

select что-то здесь
from куча связей между 5 таблицами
where dateadd(day, 30, ПолеДаты) = GetDate()

Запрос должен найти транзакции, совершенные людьми, зарегестрированными тридцать дней назад. Даже не смотря на то, что ПолеДаты содержит индекс, этот индекс не будет использоваться SQL сервер, потому что на этом поле стоит математика. Если поле как-то изменяется в запросе и используется в расчетах, то можете попрощатся с эффективностью.

Оптимизатор SQL сервер достаточно умный, но он не станет думать за вас, что математика тут нафиг не нужна.

select что-то здесь
from куча связей между 5 таблицами
where ПолеДаты = dateadd(day, -30, GetDate())

Вот теперь математики нет и SQL сервер будет использовать индекс. После этого минимального изменения запрос стал выполнятся 1 секунду.


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


Комментарии

Саша

27 Ноября 2010

Михаил, я так понимаю, вы сейчас в основном занимаетесь базами данных для Web. В перспективе не собираетесь написать книгу по созданию клиент-серверных приложений на C#? как, к примеру, книга Андрея Шкрыль Создание Клиент-серверных приложений на Delphi


Михаил Фленов

27 Ноября 2010

Ничего не планирую


x64

30 Ноября 2010

супер!
Михаил, Вы — Хакер! (в правильном смысле этого слова)


Добавить Комментарий

Еще что-нибудь

Хотите найти еще что-то интересное почитать? Можно попробовать отфильтровать заметки на блоге по категориям.

О блоге

Программист, автор нескольких книг серии глазами хакера и просто блогер. Интересуюсь безопасностью, хотя хакером себя не считаю

Обратная связь

Без проблем вступаю в неразборчивые разговоры по e-mail. Стараюсь отвечать на письма всех читателей вне зависимости от страны проживания, вероисповедания, на русском или английском языке.

Пишите мне