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

Откуда: Питер
Сообщений: 34621
Yagrus2
Есть таблица
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, для значений параметров.

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


создать индекс по

(subscriber_name, subtype, event_date )

про селективность поговорить интересно, но с таким специфичным условием вряд ли она будет низкой.
25 июл 15, 07:22    [17933292]     Ответить | Цитировать Сообщить модератору
 Re: Какие варианты оптимизации?  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34621
Okmor
Maxx,
Разместил в порядке нарастания сложности сравнения.
event_date datetime - дробный тип
subtype varchar(32) - длинна меньше чем subscriber_name varchar(64)
Могу ошибаться.


не только можешь, но и делаешь это. ...
25 июл 15, 07:25    [17933293]     Ответить | Цитировать Сообщить модератору
 Re: Какие варианты оптимизации?  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34621
SomewhereSomehow
Вопрос абстрактный, но тем лучше для собеседования. Не знаю, какой ответ ожидал собеседующий, но если он ожидал единственно верный ответ типа «нужно создать индекс по полям в where», а все другие ответы и уточняющие вопросы не принимались – то можно задуматься, а хотите ли вы работать в такой компании (при условии что собеседник – специалист).

Но мне кажется, что все-таки, собеседующий ожидал рассуждений или хотел втянуть в диалог. Мне кажется, это годный способ. Когда-то давно я читал статью http://thomaslarock.com/2012/01/the-5-dba-interview-questions-you-have-to-ask/ у Thomas Larock-а, который использует такой способ – задает абстрактный вопрос, и далее, исходя из рассуждений и хода мысли, смотрит на кандидата. Рекомендую к прочтению, довольно интересно.

Если применить данный подход к вопросу ТС, можно было бы примерно так беседовать.

Самое очевидное, что бросается в глаза – это создать индекс по полям в условии where.

Но почему в запросе используется * - действительно ли нужны все поля?

Если нужны не все, то какие нужны? Лишние убрать, а недостающие может быть добавить в Include? Важен ли размер индекса?

Если нужны все, и индекс не кластерный (кластерный уже есть, вопрос его целесообразности пока отложим), то при поиске потребуется доставать недостающие поля из кластерного, значит, важна селективность условия. Известно ли что-то про это? Будет ли индекс использоваться для поиска, если мы его создадим?

Какой порядок полей? Влияет ли неравенство в условии? Если порядок полей выберем такой – (subscriber_name, subtype, event_date) - есть ли другие запросы которые могли бы использовать этот индекс? Или похожий индекс? Может быть, сразу еще что-то добавить для других запросов или поменять порядок полей, хотя для этого запроса он будет не самым оптимальным, возможно другие выиграют от индекса. Насколько часто выполняется этот запрос по сравнению с другими? А нужно ли вообще добавлять индекс, может быть, есть похожий и нужно добавить в него поля? Насколько часто операции обновления по сравнению с чтением?

Это параметры или локальные переменные? Какие наиболее типичные значения? Нужно ли оптимизировать его под наиболее частые сочетания значений? Если это параметры – рассматриваем ли прослушивание параметров?

Какого типа эти параметры/переменные не будет ли неявных преобразований?

Наконец, почему вообще возникла потребность оптимизировать этот запрос? Что является критерием оптимизации, чему это значение сейчас равно и что хотите получить в итоге?

И т.д. можно много рассуждать, уточнять и беседовать – если вы на одной волне, можно неплохо поговорить и заодно посмотреть, как рассуждает кандидат, да и себя проверить, иногда кандидаты очень неожиданные мысли выдают. =)

Можно узнать про мифы, например, тут уже два мифа всплыло: селективность полей (что это?) и порядок условий в where.

Не знаю, опять же какой ответ ожидался, но если такой как выше описано, то вопрос вполне нормальный, о чем можно судить даже по данному топику. =)



какие фантазии!
25 июл 15, 07:27    [17933295]     Ответить | Цитировать Сообщить модератору
 Re: Какие варианты оптимизации?  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
o-o,

Сценарий напомнил сцену из 12 стульев, когда отец Федор торговался с инженером Брунсом =)
Нет, я бы не стал никого преследовать. Это просто варианты тем для беседы, не имелось ввиду, что одна сторона должна обрушить на другую все эти вопросы. Это была иллюстрация на тему статьи Томаса, например, при ответе на этот вопрос человек спрашивает про селективность предиката, можно дальше развивать эту тему, задавая вопросы в этом направлении, потом вернуться к основному вопросу и т.д.

MasterZiv,
про таких как вы я тоже не забыл, написал в самом начале
автор
Не знаю, какой ответ ожидал собеседующий, но если он ожидал единственно верный ответ типа «нужно создать индекс по полям в where», а все другие ответы и уточняющие вопросы не принимались – то можно задуматься, а хотите ли вы работать в такой компании (при условии что собеседник – специалист).
25 июл 15, 09:29    [17933395]     Ответить | Цитировать Сообщить модератору
 Re: Какие варианты оптимизации?  [new]
LOTOS
Member

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


Приветствую!

У меня вопрос, что автор топика имел ввиду под "продумать обработку NULL", если все столбцы в таблице NOT NULL?
25 июл 15, 09:36    [17933400]     Ответить | Цитировать Сообщить модератору
 Re: Какие варианты оптимизации?  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34621
SomewhereSomehow
o-o,

Сценарий напомнил сцену из 12 стульев, когда отец Федор торговался с инженером Брунсом =)
Нет, я бы не стал никого преследовать. Это просто варианты тем для беседы, не имелось ввиду, что одна сторона должна обрушить на другую все эти вопросы. Это была иллюстрация на тему статьи Томаса, например, при ответе на этот вопрос человек спрашивает про селективность предиката, можно дальше развивать эту тему, задавая вопросы в этом направлении, потом вернуться к основному вопросу и т.д.

MasterZiv,
про таких как вы я тоже не забыл, написал в самом начале
автор
Не знаю, какой ответ ожидал собеседующий, но если он ожидал единственно верный ответ типа «нужно создать индекс по полям в where», а все другие ответы и уточняющие вопросы не принимались – то можно задуматься, а хотите ли вы работать в такой компании (при условии что собеседник – специалист).


фантазировать на тему что хотел услышать собеседующий занятие неблагодарное.
Именно потому, что вернее всего именно это и хотел услышать -надо создавать индекс по тем полям и в определенной их последовательности. Что он точно не хотел услышать, так рассуждения о перестановки термов в Where. т.е . Он будет рад об этом услышать, чтобы завершить собеседование досрочно с отрицательным результатом.
25 июл 15, 17:27    [17933954]     Ответить | Цитировать Сообщить модератору
 Re: Какие варианты оптимизации?  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34621
LOTOS
Yagrus2
Есть таблица
Единственное, что пришло мне в голову это, продумать обработку NULL, для значений параметров.


Приветствую!

У меня вопрос, что автор топика имел ввиду под "продумать обработку NULL", если все столбцы в таблице NOT NULL?



он имел в виду какую то свою эксклюзивную эротическую фантазию.
в общем какой нибудь бред.
25 июл 15, 17:33    [17933965]     Ответить | Цитировать Сообщить модератору
 Re: Какие варианты оптимизации?  [new]
LOTOS
Member

Откуда:
Сообщений: 56
MasterZiv, я понимаю, что у вас возможно большой опыт, но все же не стоит так критично... человек задал вопрос, хочет разобраться... У всех разный опыт и уровень знаний. Мне интересно как себе представляет то, что написал автор.

Я бы например отвечая на данный вопрос, не стал бы говорить про индекс сразу. Считаю, что сначала нужно получить и проанализировать план выполнения запроса и уже основываясь на этом что-то добавлять... На сколько верны мои рассуждения?
26 июл 15, 12:10    [17935209]     Ответить | Цитировать Сообщить модератору
 Re: Какие варианты оптимизации?  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
LOTOS
На сколько верны мои рассуждения?


На много.
26 июл 15, 12:48    [17935285]     Ответить | Цитировать Сообщить модератору
 Re: Какие варианты оптимизации?  [new]
Кот Матроскин
Member

Откуда: Москва
Сообщений: 8933
LOTOS
Считаю, что сначала нужно получить и проанализировать план выполнения запроса и уже основываясь на этом что-то добавлять... На сколько верны мои рассуждения?


А какие варианты Вы рассчитываете увидеть в плане этого запроса? Что там, собственно, можно анализировать?
26 июл 15, 13:58    [17935400]     Ответить | Цитировать Сообщить модератору
 Re: Какие варианты оптимизации?  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
MasterZiv
фантазировать на тему что хотел услышать собеседующий занятие неблагодарное.

и
MasterZiv
Именно потому, что вернее всего именно это и хотел услышать...

Вот и не фантазируйте.

Если внимательно прочитать 17931555, то можно увидеть, что моя мысль касается подхода описанного в статье Томаса, применительно к вопросу ТС.
26 июл 15, 16:34    [17935631]     Ответить | Цитировать Сообщить модератору
 Re: Какие варианты оптимизации?  [new]
LOTOS
Member

Откуда:
Сообщений: 56
Кот Матроскин
LOTOS
Считаю, что сначала нужно получить и проанализировать план выполнения запроса и уже основываясь на этом что-то добавлять... На сколько верны мои рассуждения?


А какие варианты Вы рассчитываете увидеть в плане этого запроса? Что там, собственно, можно анализировать?


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

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

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

Откуда: Москва
Сообщений: 8933
LOTOS
Кот Матроскин
пропущено...


А какие варианты Вы рассчитываете увидеть в плане этого запроса? Что там, собственно, можно анализировать?


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


В запросе по одиночной таблице с такой структурой будет ровно один блок Clustered index scan.
26 июл 15, 19:06    [17935965]     Ответить | Цитировать Сообщить модератору
 Re: Какие варианты оптимизации?  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34621
LOTOS
MasterZiv, я понимаю, что у вас возможно большой опыт, но все же не стоит так критично... человек задал вопрос, хочет разобраться... У всех разный опыт и уровень знаний. Мне интересно как себе представляет то, что написал автор.

Я бы например отвечая на данный вопрос, не стал бы говорить про индекс сразу. Считаю, что сначала нужно получить и проанализировать план выполнения запроса и уже основываясь на этом что-то добавлять... На сколько верны мои рассуждения?


Ну теоретически да, но во-первых, это вопрос на собеседовании, так ? Ты будешь отвечать "надо посмотреть план"?
Предполагается-то что запрос неоптимально работает, значит план смотреть смысла нет, так ?
Ну и тебе вероятно без плана надо сказать, что можно сделать для оптимизации. Логично ?

Ну и ещё раз -- тут нет никакого двойного дна, это простой вопрос с простым ответом.

Кстати, ответ тут не такой и простой, потому что надо сказать, какие именно поля из SARG-а должны пойти в индекс и в каком порядке. Это достаточно много вариантов, если гадать. А если знать -- один и быстро выдаётся.

На собеседовании почти нет смысла задавать вопросы с двойным дном, лучше такие, чтобы поглядеть, что человек знает.
27 июл 15, 09:54    [17937658]     Ответить | Цитировать Сообщить модератору
 Re: Какие варианты оптимизации?  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34621
LOTOS
Кот Матроскин
пропущено...


А какие варианты Вы рассчитываете увидеть в плане этого запроса? Что там, собственно, можно анализировать?


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

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

Мне вариант, когда не посмотрев что не так, начинают добавлять индексы и что-то делать...


А что тут ещё может быть не так ?
Тут есть чёткий SARG на три поля, и вряд ли он будет неселективным.
Создавать индекс, если он не создан ещё, и всё. В вопросе не говорится, что индекс есть, соотв. не предполагается, что он есть.
Если бы спрашивали про всякие тонкие материи типа кластеризации записей в индексе, то в вопросе было бы упомянуто, какие индексы есть.
27 июл 15, 09:57    [17937672]     Ответить | Цитировать Сообщить модератору
 Re: Какие варианты оптимизации?  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34621
SomewhereSomehow
MasterZiv
фантазировать на тему что хотел услышать собеседующий занятие неблагодарное.

и
MasterZiv
Именно потому, что вернее всего именно это и хотел услышать...

Вот и не фантазируйте.

Если внимательно прочитать 17931555, то можно увидеть, что моя мысль касается подхода описанного в статье Томаса, применительно к вопросу ТС.


Если очень коротко, то по ссылке ты написал полстраницы бреда.
Т.е. именно того, что не надо было говорить, если хочешь, чтобы пройти собеседование.
27 июл 15, 10:00    [17937693]     Ответить | Цитировать Сообщить модератору
 Re: Какие варианты оптимизации?  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
MasterZiv
Если очень коротко, то по ссылке ты написал полстраницы бреда.
Т.е. именно того, что не надо было говорить, если хочешь, чтобы пройти собеседование.

Если еще короче, то вы третье сообщение не можете понять, к чему это было написано.
MasterZiv
Предполагается-то что запрос неоптимально работает, значит план смотреть смысла нет, так ?

Т.е. если запрос работает медленно - то план вы не смотрите. Типа, неоптимально - план смотреть смысла нет. Ясно.
MasterZiv
Ну и тебе вероятно без плана надо сказать, что можно сделать для оптимизации. Логично ?

Серьезно? Предлагается угадать чтоль?
MasterZiv
Тут есть чёткий SARG на три поля, и вряд ли он будет неселективным.

Да вы что? А у меня есть такие запросы, где пять и более не селективных предикатов. С чего вы взяли что не будет?
И почему "вряд ли", что за предположения? Вы же против фантазий.
MasterZiv
В вопросе не говорится, что индекс есть, соотв. не предполагается

MasterZiv
Если бы спрашивали...было бы упомянуто...

Что за домыслы и фантазии опять?

Если вы считаете бредом только половину станицы написанного мной, то я пока все ваши ответы считаю бредом. Не аргументированные домыслы поданные с невероятным апломбом.
27 июл 15, 10:25    [17937813]     Ответить | Цитировать Сообщить модератору
 Re: Какие варианты оптимизации?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
SomewhereSomehow написал всё в точку. Особенно про "фантазии", о которых столь пренебрежительно отозвался MasterZiv.
Не зная контекста индексы там могут быть мертвому припарка. Либо экзаменатор глуп, либо это попытка "развести" на рассуждения экзаменуемого.
27 июл 15, 12:57    [17938734]     Ответить | Цитировать Сообщить модератору
 Re: Какие варианты оптимизации?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
Модератор: Господа, срачег прекращаем.
27 июл 15, 13:16    [17938840]     Ответить | Цитировать Сообщить модератору
 Re: Какие варианты оптимизации?  [new]
Okmor
Member

Откуда:
Сообщений: 132
Господа. Вернитесь на самый первый пост и найдите предложение с знаком вопроса, выглядит так: "?"
Оставьте в покое структуру, по ней вопрос не задавался, и постарайтесь напрячь мозги.
Я собственно кроме перестановки условий ничего не придумал. И я знаю, что оптимизатор все равно старается поменять условия на свое усмотрение.
27 июл 15, 13:39    [17939030]     Ответить | Цитировать Сообщить модератору
 Re: Какие варианты оптимизации?  [new]
o-o
Guest
Okmor
Я собственно кроме перестановки условий ничего не придумал.

ну почему же. можно еще реестр буквам сменить при написании запроса.
комментарии втавить, розочки из псевдографики прилепить
Okmor
И я знаю, что оптимизатор все равно старается поменять условия на свое усмотрение.

а если вы знаете, что бессмысленно переставлять условия в where, зачем продолжаете настаивать-то???
27 июл 15, 13:49    [17939162]     Ответить | Цитировать Сообщить модератору
 Re: Какие варианты оптимизации?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
Okmor
Оставьте в покое структуру, по ней вопрос не задавался, и постарайтесь напрячь мозги.
Вот видите, этот вопрос уже на ранней стадии отсеивает соискателей, считающих, что "оптимизация запроса" не может включать в себя оптимизацию структуры. Или не знающих этого.

Сообщение было отредактировано: 27 июл 15, 13:58
27 июл 15, 13:57    [17939224]     Ответить | Цитировать Сообщить модератору
 Re: Какие варианты оптимизации?  [new]
Кот Матроскин
Member

Откуда: Москва
Сообщений: 8933
Okmor
Господа. Вернитесь на самый первый пост и найдите предложение с знаком вопроса, выглядит так: "?"
Оставьте в покое структуру, по ней вопрос не задавался, и постарайтесь напрячь мозги.


Все уже поняли что Вы под оптимизацией запроса понимаете только и исключительно изменение его текста. Большинство, как видно из обсуждения, считает иначе.
27 июл 15, 13:57    [17939226]     Ответить | Цитировать Сообщить модератору
 Re: Какие варианты оптимизации?  [new]
Okmor
Member

Откуда:
Сообщений: 132
o-o
а если вы знаете, что бессмысленно переставлять условия в where, зачем продолжаете настаивать-то???

Потому что план запроса можно закрепить принудительно. Я предполагал, что вы об этом все знают и таких вопросов задавать не будут.
А перестановка условий иногда дает ОГРОМНЫЙ прирост производительности.
27 июл 15, 14:24    [17939487]     Ответить | Цитировать Сообщить модератору
 Re: Какие варианты оптимизации?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Okmor
А перестановка условий иногда дает ОГРОМНЫЙ прирост производительности.

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