Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Можно ли анализатору явно указать выражение, которое считать 1 раз, а дальше использовать
|
|||
|---|---|---|---|
|
#18+
Наверняка не бывает такого, чтобы анализатор не понял этого, но... Чего-то типа select (a*b*c+d-e-f) r, case when (a*b*c+d-e-f) =0 then 1 when (a*b*c+d-e-f) >30 then 2 when log(a*b*c+d-e-f)<1 then 3 else 0 end from aaaaaaa where (a*b*c+d-e-f) >=0 даже не вопрос, чтобы не писать a*b*c+d-e-f каждый раз а просто чтобы анализатор не сделал план с пятью вычислениями a*b*c+d-e-f или только select r, case when r=0 then 1 when r>30 then 2 when log(r)<1 then 3 else 0 end from ( select a*b*c+d-e-f r from aaaaaaa ) where r>=0 ? в доке смотрел, так уж спрошу на всякий случай) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2019, 22:55 |
|
||
|
Можно ли анализатору явно указать выражение, которое считать 1 раз, а дальше использовать
|
|||
|---|---|---|---|
|
#18+
dklim.kzn, математические вычисления - не самое медленное, с чем можно столкнуться на сервере. Например, целочисленное произведение современный процессор выполняет за один такт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2019, 23:21 |
|
||
|
Можно ли анализатору явно указать выражение, которое считать 1 раз, а дальше использовать
|
|||
|---|---|---|---|
|
#18+
dklim.kznНаверняка не бывает такого, чтобы анализатор не понял этого, но...Уверен, что оптимизатор в сиквеле даже не имеет оптимизирующего это блока, за ненадобностью. Самому, конечно, нужно писать это по методу "или только", не для оптимизации, а для сокращения вероятности ошибок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2019, 23:50 |
|
||
|
Можно ли анализатору явно указать выражение, которое считать 1 раз, а дальше использовать
|
|||
|---|---|---|---|
|
#18+
dklim.kzn, Думаю, это бессмысленно, ибо ресурсов жрет тысячные доли процента производительности ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2019, 01:59 |
|
||
|
Можно ли анализатору явно указать выражение, которое считать 1 раз, а дальше использовать
|
|||
|---|---|---|---|
|
#18+
еще и планы одинаковые ну может на этапе исполнения кэшируется alexeyvgdklim.kznНаверняка не бывает такого, чтобы анализатор не понял этого, но...Уверен, что оптимизатор в сиквеле даже не имеет оптимизирующего это блока, за ненадобностью. Самому, конечно, нужно писать это по методу "или только", не для оптимизации, а для сокращения вероятности ошибок. что за метод "или только"? разовьюсь))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2019, 08:21 |
|
||
|
Можно ли анализатору явно указать выражение, которое считать 1 раз, а дальше использовать
|
|||
|---|---|---|---|
|
#18+
dklim.kznеще и планы одинаковые ну может на этапе исполнения кэшируется alexeyvgпропущено... Уверен, что оптимизатор в сиквеле даже не имеет оптимизирующего это блока, за ненадобностью. Самому, конечно, нужно писать это по методу "или только", не для оптимизации, а для сокращения вероятности ошибок. что за метод "или только"? разовьюсь))) это метод из вашего сообщения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2019, 08:46 |
|
||
|
Можно ли анализатору явно указать выражение, которое считать 1 раз, а дальше использовать
|
|||
|---|---|---|---|
|
#18+
dklim.kznчто за метод "или только"? разовьюсь))) dklim.kznили только select r, case when r=0 then 1 when r>30 then 2 when log(r)<1 then 3 else 0 end from ( select a*b*c+d-e-f r from aaaaaaa ) where r>=0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2019, 09:36 |
|
||
|
Можно ли анализатору явно указать выражение, которое считать 1 раз, а дальше использовать
|
|||
|---|---|---|---|
|
#18+
dklim.kzn, переходите на ассемблер, или хотя бы на C++. Там эта тема будет более актуальна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2019, 09:48 |
|
||
|
Можно ли анализатору явно указать выражение, которое считать 1 раз, а дальше использовать
|
|||
|---|---|---|---|
|
#18+
КритикДумаю, это бессмысленно, ибо ресурсов жрет тысячные доли процента производительностиА вообще, посмотрел, разница заметная :-) Возьмём такой пример: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. У меня разница (по CPU и Duration) между запросами стабильно в 2 раза. Так что, наверное, оптимизация, про которую говорит автор, могла бы ускорить некоторые запросы в несколько раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2019, 11:29 |
|
||
|
Можно ли анализатору явно указать выражение, которое считать 1 раз, а дальше использовать
|
|||
|---|---|---|---|
|
#18+
alexeyvg, авторУ меня разница (по CPU и Duration) между запросами стабильно в 2 раза. и всё это только приведение типов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2019, 11:35 |
|
||
|
Можно ли анализатору явно указать выражение, которое считать 1 раз, а дальше использовать
|
|||
|---|---|---|---|
|
#18+
dklim.kzn, Как правильно написали, просто чтобы исключить ошибки copy-paste можно использовать CROSS APPLY Не умеет он оптимизировать, он на каждое выражение WHEN создает отдельную переменную, и даже можно дойти до лимита переменных, если использовать несколько последовательных CROSS APPLY с CASE внутри. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2019, 11:55 |
|
||
|
Можно ли анализатору явно указать выражение, которое считать 1 раз, а дальше использовать
|
|||
|---|---|---|---|
|
#18+
TaPaKalexeyvg, авторУ меня разница (по CPU и Duration) между запросами стабильно в 2 раза. и всё это только приведение типовДа, наверное, некорректный пример... Вот, попробую так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2019, 14:45 |
|
||
|
Можно ли анализатору явно указать выражение, которое считать 1 раз, а дальше использовать
|
|||
|---|---|---|---|
|
#18+
Посетительdklim.kznеще и планы одинаковые ну может на этапе исполнения кэшируется пропущено... что за метод "или только"? разовьюсь))) это метод из вашего сообщения ))) И знаете, что делается? Не работает "или только". Предикат считается отдельно. А скаляр отдельно в другом пункте плана. Я писал, что планы одинаковые в итоге. Если только какой то оптимизатор дальше роляет. Кэш процессора или менеджер исполнения какой-нибудь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2019, 06:36 |
|
||
|
Можно ли анализатору явно указать выражение, которое считать 1 раз, а дальше использовать
|
|||
|---|---|---|---|
|
#18+
.Евгенийdklim.kzn, переходите на ассемблер, или хотя бы на C++. Там эта тема будет более актуальна. Для моей задачи и sql подходит На i7 время исполнения запооса по таблице с 1м записей то 0 то 1 мс, это годиться. На С перейти сейчас можно с использованием oltp. Но кстати, пришлось отказаться от использования. Отключает параллелизм, и еще ограничения в запросах - в итоге неOLTP получается быстрее. И я не помню еще, отключается ли batch для колумнстор. В итоге оставил обычный запрос, но с таблицами, оптимизированными для памяти. Про использование С интересно почитать. А именно в чем смысл от сервера тогда, какой вариант ускорения от С ? Вообще часто можно ускорить запрос до нужного. Основной запрос у меня считается только по свежим записям. Но для этого надо получить из последней записи максимаальный номер (не identity). Ключ по двум полям, и номер - второй. Поэтому отлично получилось по TOP брать вязкой с таблицей стационарных значений первого поля в ключе, а потом уже брать максимум из этих значений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2019, 07:04 |
|
||
|
Можно ли анализатору явно указать выражение, которое считать 1 раз, а дальше использовать
|
|||
|---|---|---|---|
|
#18+
dklim.kznНа С перейти сейчас можно с использованием oltp. Но кстати, пришлось отказаться от использования. Отключает параллелизм, и еще ограничения в запросах - в итоге неOLTP получается быстрееВ смысле? OLTP - это оперативная обработка транзакций. Например, 1С. И вообще большинство БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2019, 10:20 |
|
||
|
Можно ли анализатору явно указать выражение, которое считать 1 раз, а дальше использовать
|
|||
|---|---|---|---|
|
#18+
dklim.kznПро использование С интересно почитать. А именно в чем смысл от сервера тогда, какой вариант ускорения от С ? Не знаю, что вы поняли из моих слов. Я говорил о том, что СУБД при выполнении sql-запроса нагружает процессоры множеством относительно простых действий (например, чтением страниц памяти, формированием рекордсета, обновлением статистики и т.д.) и некоторым количеством сложных (типа переключения контекста потока). По этой причине ваши пять вычислений - просто экономия на спичках. Если бы ваши 1 млн записей по 50 байт хранились в стандартной коллекции (любого компилируемого ЯВУ), то подобная вашей оптимизация могла ускорить работу с ней. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2019, 11:23 |
|
||
|
Можно ли анализатору явно указать выражение, которое считать 1 раз, а дальше использовать
|
|||
|---|---|---|---|
|
#18+
alexeyvgdklim.kznНа С перейти сейчас можно с использованием oltp. Но кстати, пришлось отказаться от использования. Отключает параллелизм, и еще ограничения в запросах - в итоге неOLTP получается быстрееВ смысле? OLTP - это оперативная обработка транзакций. Например, 1С. И вообще большинство БД. OLTP-процедуры компилируются "в собственный код", в dll, через промежуточное формирование файлов на С. Я не сомневаюсь,, что Вам это известно, но просто отмечаю, что если кому-то очень надо в С - велкам ту OLTP-процедуры ))) Толку на самом деле немного лично для меня пока в смысле применения для расчетов - обычные запросы быстрее Но вот грядет написание триггера, он будет NC, может увижу разницу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2019, 12:50 |
|
||
|
Можно ли анализатору явно указать выражение, которое считать 1 раз, а дальше использовать
|
|||
|---|---|---|---|
|
#18+
.Евгений, ну да, похоже сервер не парится с этим важнее отделить блок фильтрации от блока расчетов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2019, 12:52 |
|
||
|
Можно ли анализатору явно указать выражение, которое считать 1 раз, а дальше использовать
|
|||
|---|---|---|---|
|
#18+
dklim.kznНаверняка не бывает такого, чтобы анализатор не понял этого, но... Чего-то типа select (a*b*c+d-e-f) r, case when (a*b*c+d-e-f) =0 then 1 when (a*b*c+d-e-f) >30 then 2 when log(a*b*c+d-e-f)<1 then 3 else 0 end from aaaaaaa where (a*b*c+d-e-f) >=0 в доке смотрел, так уж спрошу на всякий случай) Легко! Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. И, кстати: Владислав Колосов dklim.kzn, математические вычисления - не самое медленное, с чем можно столкнуться на сервере. Например, целочисленное произведение современный процессор выполняет за один такт. Если один из компонентов - скалярка - всё совсем не радужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2019, 13:39 |
|
||
|
Можно ли анализатору явно указать выражение, которое считать 1 раз, а дальше использовать
|
|||
|---|---|---|---|
|
#18+
dklim.kznalexeyvgВ смысле? OLTP - это оперативная обработка транзакций. Например, 1С. И вообще большинство БД. OLTP-процедуры компилируются "в собственный код", в dll, через промежуточное формирование файлов на С. Я не сомневаюсь,, что Вам это известно, но просто отмечаю, что если кому-то очень надо в С - велкам ту OLTP-процедуры )))А, понятно. Это называется Natively Compiled Stored Procedures . А OLTP - это OnLine Transaction Processing ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2019, 13:41 |
|
||
|
Можно ли анализатору явно указать выражение, которое считать 1 раз, а дальше использовать
|
|||
|---|---|---|---|
|
#18+
dklim.kznOLTP-процедуры компилируются "в собственный код", в dll, через промежуточное формирование файлов на С.Интересно, где вам попалась такая интерпретация этой аббревиатуры? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2019, 13:43 |
|
||
|
Можно ли анализатору явно указать выражение, которое считать 1 раз, а дальше использовать
|
|||
|---|---|---|---|
|
#18+
Да, мне тоже интересно. OLPT не диктует внутреннюю реализацию. Компиляция процедур в пи-код обусловлена использованием механики интерпретатора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2019, 13:53 |
|
||
|
Можно ли анализатору явно указать выражение, которое считать 1 раз, а дальше использовать
|
|||
|---|---|---|---|
|
#18+
ну у меня так скомпилировалось в собственный код) мс добивались и добилась желаемого, наверное впрочем, ничего страшного не вижу наверное, если ms сделали что-то для чего-то - то можно "внутри мс" говорить и в таком варианте если мс сделали отдельный вид процедур для использования в oltp-решениях, то ... а так, конечно, у меня тоже oltp на несколько тысяч транзакций в секунду и как минимум 3/4 будет пережевываться не nc-процедурой но при этом в таблице, оптимизированной для памяти однако, тоже вопрос спорный и пограничный - транзакции ли у меня))) если расчеты делаются по каждой, но какие-то результаты генерируются только для единиц из них ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2019, 14:40 |
|
||
|
Можно ли анализатору явно указать выражение, которое считать 1 раз, а дальше использовать
|
|||
|---|---|---|---|
|
#18+
dklim.kznну у меня так скомпилировалось в собственный код) мс добивались и добилась желаемого, наверное впрочем, ничего страшного не вижу наверное, если ms сделали что-то для чего-то - то можно "внутри мс" говорить и в таком варианте если мс сделали отдельный вид процедур для использования в oltp-решениях, то ... а так, конечно, у меня тоже oltp на несколько тысяч транзакций в секунду и как минимум 3/4 будет пережевываться не nc-процедурой но при этом в таблице, оптимизированной для памяти однако, тоже вопрос спорный и пограничный - транзакции ли у меня))) если расчеты делаются по каждой, но какие-то результаты генерируются только для единиц из нихЖесть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2019, 21:03 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39799149&tid=1687969]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
86ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
81ms |
get tp. blocked users: |
2ms |
| others: | 268ms |
| total: | 489ms |

| 0 / 0 |
