|
как можно повысить приоритет одного условия в предложении Where
|
|||
---|---|---|---|
#18+
Подскажите как можно повысить приоритет условия для select в предложении Where, пример код из процедуры: let fvar1 = 0; Select * Into * From tab1 t Where t.col1 = 1 And t.col2 = function1(p1, p2) And t.col2 = function2(p3, p4) Union Select * .... Union Select * .... тут условие t.col1 = 1 легкое, хочется что б оно выполнялось первым, остальные тяжелые. Может просто его в скобки взять. подскажите пожалуйста ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2013, 16:08 |
|
как можно повысить приоритет одного условия в предложении Where
|
|||
---|---|---|---|
#18+
допустил ошибку в предыдущем (она на суть не влияет), тут исправился. Подскажите как можно повысить приоритет условия для select в предложении Where, пример код из процедуры: let fvar1 = function3(p1,p2, ... ); Select * Into * From tab1 t Where fvar1 = 1 And t.col2 = function1(p1, p2) And t.col2 = function2(p3, p4) Union Select * .... Union Select * .... тут условие fvar1 = 1 легкое, хочется что б оно выполнялось первым, остальные тяжелые, т.е. хочется как то явно оптимизатору подсказать что бы легкое условие проверялось первым. Может просто его в скобки взять?. подскажите пожалуйста ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2013, 17:54 |
|
как можно повысить приоритет одного условия в предложении Where
|
|||
---|---|---|---|
#18+
1. Вы уверены, что оптимизатор сам не берет первым t.col1 = 1? План запроса (set explain on) смотрели? 2. Если план запроса показал, что оптимизатор работает неоптимально, то вполне возможно, что для вправления ему мозгов достаточно дать update statistics (потом опять проверить план запроса). 3. Если оптимизатор опять лажает (что маловероятно), то можно воспользоваться хинтами, явно указав оптимизатору то, как надо делать. Какие хинты надо использовать по предоставленной информации не определить. Кроме того, использование хинтов может отрицательно сказаться при разрастании БД или модификации таблицы. 4. Вы привели очень мало информации для оптимизации запроса. Следует указать точную структуру таблицы (особенно важны индексы), особенности фрагментации, приблизительное число записей и записей с t.col1 = 1, версию информикса и ОС и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2013, 20:54 |
|
как можно повысить приоритет одного условия в предложении Where
|
|||
---|---|---|---|
#18+
буду смотреть, спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2013, 00:30 |
|
как можно повысить приоритет одного условия в предложении Where
|
|||
---|---|---|---|
#18+
faidПодскажите как можно повысить приоритет условия для select в предложении Where, пример код из процедуры: let fvar1 = 0; Select * Into * From tab1 t Where t.col1 = 1 And t.col2 = function1(p1, p2) And t.col2 = function2(p3, p4) Union Select * .... Union Select * .... тут условие t.col1 = 1 легкое, хочется что б оно выполнялось первым, остальные тяжелые. Может просто его в скобки взять. подскажите пожалуйста Вы настолько не-sql-но мыслите, что единственным полезным советом будет совет почитать что-то типа "SQL for dummies". Там вам расскажут, что в SQL а) нет приоритетов б) и порядка выполнения операций тоже нет и в) "легкость" фильтра никакого отношения к его ценности не имеет - если у вас все записи в таблице имеют col1 равным 1, то это условие совершенно бесполезно, и будет лучше, если оптимизатор его проигорирует. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2013, 02:23 |
|
|
start [/forum/topic.php?fid=44&msg=38339295&tid=1607032]: |
0ms |
get settings: |
24ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
109ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
152ms |
get tp. blocked users: |
1ms |
others: | 312ms |
total: | 633ms |
0 / 0 |