Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
 Какие варианты оптимизации?  [new]
Yagrus2
Member

Откуда: Москва
Сообщений: 912
Есть таблица
create table dbo.call (
id 	int	identity	primary key clustered,	
subscriber_name	varchar(64)	not null,	
event_date 	datetime	not null,	
subtype 	varchar(32)	not null,	
type    	varchar(128)	not null,	
event_cnt	int		not null
)

Как бы вы оптимизировали следующий запрос?
select *
from dbo.call
where subscriber_name = @a and event_date > @b and subtype = @c 

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

Собственно эта задача с собеседования. В условии ничего не говориться про силективность столбцов.

Сообщение было отредактировано: 17 апр 15, 17:34
17 апр 15, 14:22    [17529471]     Ответить | Цитировать Сообщить модератору
 Re: Какие варианты оптимизации?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Yagrus2
Как бы вы оптимизировали следующий запрос?

Что понимается под "оптимизировали" ? Изменили текст запроса что ли ?
17 апр 15, 14:26    [17529492]     Ответить | Цитировать Сообщить модератору
 Re: Какие варианты оптимизации?  [new]
Yagrus2
Member

Откуда: Москва
Сообщений: 912
Glory
Что понимается под "оптимизировали" ? Изменили текст запроса что ли ?

Оптимизировали = уменьшили время получения выборки.
17 апр 15, 14:31    [17529510]     Ответить | Цитировать Сообщить модератору
 Re: Какие варианты оптимизации?  [new]
Konst_One
Member

Откуда:
Сообщений: 11680
забавно, а где тут время первой выборки и её план?
17 апр 15, 14:33    [17529524]     Ответить | Цитировать Сообщить модератору
 Re: Какие варианты оптимизации?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Yagrus2
Glory
Что понимается под "оптимизировали" ? Изменили текст запроса что ли ?

Оптимизировали = уменьшили время получения выборки.

Покупка памяти и более быстрых дисков тоже может уменьшить время получения выборки
17 апр 15, 14:34    [17529531]     Ответить | Цитировать Сообщить модератору
 Re: Какие варианты оптимизации?  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21494
Я бы начал с построения индекса по (subscriber_name,subtype[,event_date])
17 апр 15, 14:35    [17529540]     Ответить | Цитировать Сообщить модератору
 Re: Какие варианты оптимизации?  [new]
virtuOS
Member

Откуда: большая деревня
Сообщений: 266
Для сферического коня в вакууме:
1) Переделать индекс по id на некластерный уникальный
2) кластерный на event_date
3) некластерные на subscriber_name и subtype
17 апр 15, 14:49    [17529647]     Ответить | Цитировать Сообщить модератору
 Re: Какие варианты оптимизации?  [new]
Konst_One
Member

Откуда:
Сообщений: 11680
virtuOS
Для сферического коня в вакууме:
1) Переделать индекс по id на некластерный уникальный
2) кластерный на event_date
3) некластерные на subscriber_name и subtype


ну разве что для сферического. а вообще вопрос ни о чём, оторван от контекста.
17 апр 15, 14:53    [17529676]     Ответить | Цитировать Сообщить модератору
 Re: Какие варианты оптимизации?  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4539
Glory
Yagrus2
пропущено...

Оптимизировали = уменьшили время получения выборки.

Покупка памяти и более быстрых дисков тоже может уменьшить время получения выборки

+ флуд
...со своей стороны могу посоветовать уменьшить количество записей.
17 апр 15, 16:42    [17530488]     Ответить | Цитировать Сообщить модератору
 Re: Какие варианты оптимизации?  [new]
Yagrus2
Member

Откуда: Москва
Сообщений: 912
Konst_One,
Контекста вообще нет. Я сформулировал задачу один в один, как на собеседовании.
Как я понял, задача обстрактна.
17 апр 15, 16:52    [17530586]     Ответить | Цитировать Сообщить модератору
 Re: Какие варианты оптимизации?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Yagrus2
Как я понял, задача обстрактна.

запрос - это текст неких команд, который выдает какой-то нужный результат для решения какой-то задачи.
если для вас единственным критерием является время выполнения, а результат не важен, то самой быстрой оптимизацией вашего запроса будет select 1
17 апр 15, 16:57    [17530619]     Ответить | Цитировать Сообщить модератору
 Re: Какие варианты оптимизации?  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4539
Yagrus2, изменение структуры таблицы <> оптимизация запроса!
17 апр 15, 16:57    [17530623]     Ответить | Цитировать Сообщить модератору
 Re: Какие варианты оптимизации?  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4974
Yagrus2
Glory
Что понимается под "оптимизировали" ? Изменили текст запроса что ли ?

Оптимизировали = уменьшили время получения выборки.


Создать индекс по полям в WHERE .
17 апр 15, 16:59    [17530637]     Ответить | Цитировать Сообщить модератору
 Re: Какие варианты оптимизации?  [new]
Yagrus2
Member

Откуда: Москва
Сообщений: 912
virtuOS
Для сферического коня в вакууме:
1) Переделать индекс по id на некластерный уникальный
2) кластерный на event_date
3) некластерные на subscriber_name и subtype


Анализировать необходимость некластерного индекса необходимо имея представление о селективности. в условии задачи про нее ни слова.
17 апр 15, 17:02    [17530667]     Ответить | Цитировать Сообщить модератору
 Re: Какие варианты оптимизации?  [new]
Кот Матроскин
Member

Откуда: Москва
Сообщений: 8933
Yagrus2
Konst_One,
Контекста вообще нет. Я сформулировал задачу один в один, как на собеседовании.


Наверно, от Вас ждали, что Вы станете задавать уточняющие вопросы.
17 апр 15, 17:03    [17530672]     Ответить | Цитировать Сообщить модератору
 Re: Какие варианты оптимизации?  [new]
Alexander Titkin
Member

Откуда: Москва
Сообщений: 91
Yagrus2
Анализировать необходимость некластерного индекса необходимо имея представление о селективности. в условии задачи про нее ни слова.


При чем тут селективность?
17 апр 15, 17:26    [17530821]     Ответить | Цитировать Сообщить модератору
 Re: Какие варианты оптимизации?  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21494
Alexander Titkin
При чем тут селективность?
Да при том, что при низкой селективности сервер положит на индексы и будет сканить таблицу.
17 апр 15, 17:51    [17530927]     Ответить | Цитировать Сообщить модератору
 Re: Какие варианты оптимизации?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Akina
Alexander Titkin
При чем тут селективность?
Да при том, что при низкой селективности сервер положит на индексы и будет сканить таблицу.
При правильном индексе - не будет.
17 апр 15, 17:55    [17530935]     Ответить | Цитировать Сообщить модератору
 Re: Какие варианты оптимизации?  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21494
Гавриленко Сергей Алексеевич
При правильном индексе - не будет.
Не понимаю, что имеется в виду под "правильным индексом". Если запрос выбирает 50% записей таблицы, и индекс непокрывающий, никакая правильность не поможет. Бывали случаи, сервер даже FORCE INDEX игнорировал...
17 апр 15, 17:58    [17530944]     Ответить | Цитировать Сообщить модератору
 Re: Какие варианты оптимизации?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Akina
Гавриленко Сергей Алексеевич
При правильном индексе - не будет.
Не понимаю, что имеется в виду под "правильным индексом". Если запрос выбирает 50% записей таблицы, и индекс непокрывающий, никакая правильность не поможет. Бывали случаи, сервер даже FORCE INDEX игнорировал...
Правильный -- это такой, который не будет игнорироваться, даже если выбирается 90%.

Сообщение было отредактировано: 17 апр 15, 18:01
17 апр 15, 18:01    [17530952]     Ответить | Цитировать Сообщить модератору
 Re: Какие варианты оптимизации?  [new]
Кот Матроскин
Member

Откуда: Москва
Сообщений: 8933
Akina
Alexander Titkin
При чем тут селективность?
Да при том, что при низкой селективности сервер положит на индексы и будет сканить таблицу.


В задании же не сказано "оптимизировать запрос для конкретного содержимого таблицы". Если в результате изменений запрос на каких-то параметрах и каких-то наборах данных начинает работать лучше, а на остальных работает не хуже - это, конечно, оптимизация.
17 апр 15, 19:01    [17531138]     Ответить | Цитировать Сообщить модератору
 Re: Какие варианты оптимизации?  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1867
Yagrus2,

Заменить * только на те поля которые реально необходимы и положить покрывающий индекс.
17 апр 15, 22:45    [17531936]     Ответить | Цитировать Сообщить модератору
 Re: Какие варианты оптимизации?  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Гавриленко Сергей Алексеевич
Akina
пропущено...
Не понимаю, что имеется в виду под "правильным индексом". Если запрос выбирает 50% записей таблицы, и индекс непокрывающий, никакая правильность не поможет. Бывали случаи, сервер даже FORCE INDEX игнорировал...
Правильный -- это такой, который не будет игнорироваться, даже если выбирается 90%.
Тогда это должен быть кластерный по полям которые в WHERE.
18 апр 15, 00:38    [17532281]     Ответить | Цитировать Сообщить модератору
 Re: Какие варианты оптимизации?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Mind
Гавриленко Сергей Алексеевич
пропущено...
Правильный -- это такой, который не будет игнорироваться, даже если выбирается 90%.
Тогда это должен быть кластерный по полям которые в WHERE.
Не обязательно. Индекс должен быть покрывающим, и с правильным порядком полей. Вполне себе годный вопрос для собеседования.
18 апр 15, 01:47    [17532411]     Ответить | Цитировать Сообщить модератору
 Re: Какие варианты оптимизации?  [new]
Шамиль Фаридович
Member

Откуда: Саратов
Сообщений: 495
Гавриленко Сергей Алексеевич,
а в чем смысл строить индексы по полям с низкой селективностью, чем скан по такому индексу в запросе с фильтрацией по ключу индекса лучше скана по любому другому индексу, содержащему необходимый набор полей?

тем том, что в первом случае данные отсортированы, и сканируются не все страницы индекса, а только диапазон, а во втором случае все?
24 июл 15, 09:50    [17928564]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить