#1 27.03.08 21:03
MSSQL2000. Execution plan
Насколько я знаю, эскюэль сервер, прежде чем выполнить запрос, составляет план выполнения запроса(Execution plan). Он хранится некоторое время на сервере. Если повторно выполняется такой же запрос (пусть даже с другими параметрами), то план выполнения заново не создается, а используется уже существующий. Возникла такая ситуация, что необходимо:
а) либо сделать лишний join таблицы и тогда сервер не будет заново составлять план выполнения (съэкономив время на этом)
б) либо не делать join (естесственно, сэкономив время выполнения), но тогда каждый раз план выполнения запроса будет создаваться новый.
Что выбрать не знаю. В общем, требуется оценить время, необходимое на составление этого плана... оценить его не могу даже примерно, возможно эти затраты будут пренебрежимо малы. По каким критерием можно произвести данную оценку? И вообще, стоит ли на это заморачиваться или просто забить?..
Offline
#4 29.03.08 16:00
Re: MSSQL2000. Execution plan
2СbIP: При использовании join новый план выполнения как раз НЕ создается. Потому-то и интересно узнать, что более затратно, сделать лишний join или каждый раз создавать новый план выполнения. К сожалению, указанное количество записей в перспективе будет достигнуто:(
2dotnet: Создание лишнего плана выполнения запроса тоже ничего хорошего не даст. Но если временные затраты на join можно оценить, то на составление плана оценить сложно, по крайней мере мне. Как пример, возьми запрос, который будет выполняться 20-30 сек. и пропусти его два раза подряд. Во второй раз запрос будет выполняться заметно быстрее, так как эскюэль сервер будет использовать готовый план выпонения.
Offline
#6 30.03.08 00:04
Re: MSSQL2000. Execution plan
Tigrishka, разве план выполнения может быть лишним? у тебя в базе запросы каждый раз новые что-ли?
Тем более, что он требуется в любом случае, чтобы MSSQL сервер смог соптимизировать и эффективно выполнить запрос.
По-моему, тут главное не мешать серверу делать своё дело, а оптимизировать саму семантику запроса, используя, например, знания предметной области.
Offline
#7 30.03.08 00:08
Re: MSSQL2000. Execution plan
Tigrishka написал(а):
К сожалению, указанное количество записей в перспективе будет достигнуто:(
предвариельная оптимизация - корень всего зла ;)
ЗЫ не понимаю, что мешает тебе взять и проверить руками оба твоих варианта, просто погоняв оба запроса пару сотен раз и сравнив время выполнения
Offline
#9 30.03.08 14:40
Re: MSSQL2000. Execution plan
имхо, не все так просто :)
otaku, Это, конечно, вариант. Для данного случая так и сделаю. Но такая задача возникает не первый раз, и что, каждый раз заполнять таблицу (и не одну) случайными данными? Хотелось бы уметь оценивать время, необходимое на составление плана выполнения исходя из текста запроса и количества записей. Хотя, теперь мне уже кажется, что это невозможно, и в каждом конкретном случае придется действовать по - разному...
dotnet, Ага, каждый раз новые запросы, используются динамические запросы. Строка запроса формируется во время выполнения программы в зависимости от каких-либо параметров и отправляется на выполнение. И вот тут появляются вопросы: что лучше, привести заново сформированный запрос к виду предыдущего запроса, добавив кое-какие операции или ничего ни к чему не приводить, но план выполнения будет составлен заново?
XuMiX, результаты, полученные при выполнении запроса много раз на небольшом количестве данных, и при выполнении того же запроса один раз на большом количестве данных, скорее всего, будут разные. Про предварительную оптимизацию согласна, просто хотелось поэкспериментировать :)
efferson, в MSSQL2000 тоже есть, правда вроде коряво работает (или я не разобралась:) ) поэтому использую SQL Management Studio 2005. но вопрос - то не в этом :)
Offline

