|
|
|
Что будет быстрее
|
|||
|---|---|---|---|
|
#18+
Добрый день. Задача следующая, написать процедуру которая будет возвращать данные Варианты решения (код несколько упрощен, чтобы была понятнее суть вопроса) 1. Код: plaintext 1. 2. 2. Код: plaintext 1. 2. 3. 4. 5. 6. Т.е. на самом деле динамически будет вызываться запрос, например Код: plaintext 1. Вопрос в том что будет работать быстрее. В первом варианте план запроса (как обещает Microsoft) будет построен один раз при первом вызове процедуры, который будет явно менее оптимален чем план запроса когда условие 1 is Null сразу отбросится. Во втором случае план запроса получится вроде оптимальным, но тогда каждый раз будет производиться разбор запроса, да еще и потери времени при динамическом выполнении запроса. Кроме того запрос во втором случае не кэшируется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2002, 15:39:23 |
|
||
|
Что будет быстрее
|
|||
|---|---|---|---|
|
#18+
На самом деле запрос не особо тяжелый, поэтому не думаю, что есть смысл заморачиваться на скорость компиляции, в любом случае, при единичный запросах она не составит какое-то заметное время. разве что вместо replace использовать другие конструкции. Я бы предложил два вариант (см.ниже)... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. либо в условии WHERE использовать Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2002, 16:47:08 |
|
||
|
Что будет быстрее
|
|||
|---|---|---|---|
|
#18+
Решил дописать Запрос указан для примера и на практике может быть и очень сложным, а количество пользователей довольно большим, поэтому и интересует скорость выполнения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2002, 17:15:48 |
|
||
|
Что будет быстрее
|
|||
|---|---|---|---|
|
#18+
да незачем тут использовать динамический SQL запрос. Хотите чтоб каждый раз план составлся заново - используйте with recompile. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2002, 18:09:26 |
|
||
|
Что будет быстрее
|
|||
|---|---|---|---|
|
#18+
если количество запросов велико то время будет одинаково... запросы перекомпилится будут редко... небольшие затраты на разбор и выяснение того что такой запрс уже был , и возьмется из кэша.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2002, 18:36:44 |
|
||
|
Что будет быстрее
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. Посмотри на план выполнения запроса - индексы по Код и Заказ (если они есть ) использоваться не будут. То же самое будет и с твоим динамическим запросом Код: plaintext 1. Лучше всего будет самому составлять WHERE когда нужно и только для нужных параметров ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2002, 18:51:13 |
|
||
|
Что будет быстрее
|
|||
|---|---|---|---|
|
#18+
Попробую немного покритиковать предложения самому формировать предложение where Бесспорно - это было-бы оптимально, но приходится писать код. Писать код - это время ну и т.д. не использовать динамический SQL а писать WITH RECOMPILE не помогает, насколько я понимаю по причине того что сначала процедура перекомпилится, а уж потом будет разбираться какие ей там параметры пришли не будут использоваться индексы если писать OR смотрел Execution Plan - используются индексы как надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2002, 10:17:22 |
|
||
|
Что будет быстрее
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. Если Заказ NULLABLE то Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2002, 14:13:48 |
|
||
|
Что будет быстрее
|
|||
|---|---|---|---|
|
#18+
2 Akuz Вряд ли так будет быстрее работать, достаточно посмотреть план и убедиться, что случае Код=Код MS SQL все равно будет искать по этому условию, но не отбрасывать его как в случае null is null И еще, вы меня не правильно поняли. Меня не интересует как так написать запрос чтобы он быстрее работал с Replace или с IsNull или еще как. Запрос я привел для примера, чтобы легче было объяснить проблему. Меня интересует, что на практике или в теории будет работать быстрее в хранимой процедуре вариант 1 или вариант 2. Я понимаю что для приведенного примера все равно, но в реальности запрос может связывать 20 и более таблиц, а условии where участвовать 20 и более критериев поиска. Вот в этом случае и вознакает проблема когда может понадобиться отбирать по одному критерию как Код: plaintext 1. 2. а может по нескольким Код: plaintext 1. 2. Согласитесь не совсем одинаково, если учесть что реальный запрос (не из примера) очень сложный и данных очень много ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2002, 15:42:12 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32047151&tid=1820715]: |
0ms |
get settings: |
8ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
32ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 219ms |
| total: | 353ms |

| 0 / 0 |
