Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите, пожалуйста, оптимизировать запрос для бд.

Дмитрий Стадницкий Знаток (444), на голосовании 2 года назад
DECLARE @StartTime datetime2 = '2010-08-30 16:27';

SELECT TOP(5000) wl.SessionID, wl.ServerID, wl.UserName
FROM Marketing.WebLog AS wl
WHERE wl.SessionStart >= @StartTime
ORDER BY wl.SessionStart, wl.ServerID;
GO

Скриншот бд и индексов прикрепляю фотографией.
Голосование за лучший ответ
Владимир Алексеев Оракул (50294) 3 года назад
1 приличные люди приводят текстовый файл скрипта генерации БД.
2 и тип сервера.
3 исполняй
myodo.ru Мудрец (12806) 3 года назад
для разгона запроса нужна не только структура данных, но и план исполнения. без плана нужно в хрустальный шар смотреть, чтобы понять на какой именно операции он тормозит.

хрустальный шар мне говорит, что у тебя не хватает индекса на поле ServerID. точность предсказания ~60%.
Дмитрий СтадницкийЗнаток (444) 3 года назад
Здравствуйте, да, извините, совсем забыл
myodo.ru Мудрец (12806) мелкомягкие утомляют своим стремлением сделать не как у людей. по твоему плану выходит, что индекс на ServerID скорее всего не поможет. рецепт такой: 1. добавь один индекс на 2 поля SessionStart и ServerID. посмотри подрастет ли производительность. шанс небольшой, зато проверить просто. 2. если 1 не сработает, дели таблицу на partitions, например, по дате/времени и обращайся в запросе к ним явным образом. для 2 вероятность ускорения заметная: по плану у тебя самая медленная операция - это index scan, то есть данных слишком много. partition объем данных на один запрос уменьшит.
Похожие вопросы