Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Проблема с оптимизацией IS NOT NULL
|
|||
|---|---|---|---|
|
#18+
Делали тут небольшое сравнение СУБД и нарвались на вот какую проблему: Запрос: Код: sql 1. План запроса: Код: sql 1. 2. 3. 4. 5. 6. То есть MS SQL не догадывается бежать только по не NULL значениям. При этом если добавить явно IS NOT NULL все становится хорошо. Там может нужен какой-то специальный тип индекса? И странно что Oracle отлично разруливает эту проблему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2019, 10:57 |
|
||
|
Проблема с оптимизацией IS NOT NULL
|
|||
|---|---|---|---|
|
#18+
А почему вы задокументированное поведение называете проблемой? Тут нет никакой проблемы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2019, 11:05 |
|
||
|
Проблема с оптимизацией IS NOT NULL
|
|||
|---|---|---|---|
|
#18+
CammomileА почему вы задокументированное поведение называете проблемой? Тут нет никакой проблемы. Ну так запрос выполняется 3 секунды. А у Oracle 30мс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2019, 11:33 |
|
||
|
Проблема с оптимизацией IS NOT NULL
|
|||
|---|---|---|---|
|
#18+
oracle != mssql - запомните и дальше станет проще ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2019, 11:45 |
|
||
|
Проблема с оптимизацией IS NOT NULL
|
|||
|---|---|---|---|
|
#18+
Konst_Oneoracle != mssql - запомните и дальше станет проще Поверьте я это заметил. Я бы даже сказал это два антипода. Причем, как человеку с навязчивым перфекционизмом, я очень благодарен Oracle. Потому как когда ты делаешь говно и тебя это напрягает, ты вспоминаешь что есть такая штука как Oracle и тебе становится гораздо легче. Я когда тестировал три базы, и мне надо было что-то проверить на Oracle я понимал, что а) логику надо выключить, б) приготовиться долбаться с ним в раза 4 больше чем с остальными. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2019, 11:58 |
|
||
|
Проблема с оптимизацией IS NOT NULL
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie, в статье ребята не смогли в SQL, поэтому придумали какую-то свою приблуду и попытались написать, почему в SQL всё плохо. Те же cross apply и instead of триггеры для вьюшек как-то упустили. Может не знали - подтверждение что "не смогли в SQL". Если знали и не описали, ибо в статью слегка ломало - то что-то другое :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2019, 12:04 |
|
||
|
Проблема с оптимизацией IS NOT NULL
|
|||
|---|---|---|---|
|
#18+
Курсоры, триггеры и развесистый pl/sql - это часто встречающийся подход в оракле, который ломается, когда вы хотите сделать так же на mssql. И, аналогично, обычные подходы из mssql часто не самые эффективные в оракле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2019, 12:12 |
|
||
|
Проблема с оптимизацией IS NOT NULL
|
|||
|---|---|---|---|
|
#18+
andy stNitro_Junkie, в статье ребята не смогли в SQL, поэтому придумали какую-то свою приблуду и попытались написать, почему в SQL всё плохо. Те же cross apply и instead of триггеры для вьюшек как-то упустили. Может не знали - подтверждение что "не смогли в SQL". Если знали и не описали, ибо в статью слегка ломало - то что-то другое :) С CROSS APPLY дополнили статью. INSTEAD OF это не то в данном случае. Если вы сделаете триггер INSTEAD OF на balance, он не будет вызываться, когда скажем shipmentDetail поменялось, а там именно об этом речь шла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2019, 12:12 |
|
||
|
Проблема с оптимизацией IS NOT NULL
|
|||
|---|---|---|---|
|
#18+
вы в той статье сами себя загнали в угол с такой архитектурой данных, которая не очень удобна для работы в mssql, а потом пытаетесь героически преодолеть ограничения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2019, 12:13 |
|
||
|
Проблема с оптимизацией IS NOT NULL
|
|||
|---|---|---|---|
|
#18+
Konst_OneКурсоры, триггеры и развесистый pl/sql - это часто встречающийся подход в оракле, который ломается, когда вы хотите сделать так же на mssql. И, аналогично, обычные подходы из mssql часто не самые эффективные в оракле. Вот это странно, потому как триггеры в MS SQL имхо сделаны лучше чем в оракл. Во всяком случае там N+1 проблему победили. И многие ораклоиды поэтому мне говорили, что стараются избегать триггеров. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2019, 12:42 |
|
||
|
Проблема с оптимизацией IS NOT NULL
|
|||
|---|---|---|---|
|
#18+
Konst_Oneвы в той статье сами себя загнали в угол с такой архитектурой данных, которая не очень удобна для работы в mssql, а потом пытаетесь героически преодолеть ограничения. А что там такого особенного в архитектуре. Там же просто документы/ остатки и т.п. Или вы что-то другое имеете ввиду? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2019, 12:44 |
|
||
|
Проблема с оптимизацией IS NOT NULL
|
|||
|---|---|---|---|
|
#18+
имелось ввиду как вы эти данные храните (стуктуру таблиц и их взаимосвязь) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2019, 12:46 |
|
||
|
Проблема с оптимизацией IS NOT NULL
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkieandy stNitro_Junkie, в статье ребята не смогли в SQL, поэтому придумали какую-то свою приблуду и попытались написать, почему в SQL всё плохо. Те же cross apply и instead of триггеры для вьюшек как-то упустили. Может не знали - подтверждение что "не смогли в SQL". Если знали и не описали, ибо в статью слегка ломало - то что-то другое :) С CROSS APPLY дополнили статью. INSTEAD OF это не то в данном случае. Если вы сделаете триггер INSTEAD OF на balance, он не будет вызываться, когда скажем shipmentDetail поменялось, а там именно об этом речь шла. ммм... а давайте придумаем еще еще какие-нибудь свои правила и будем радоваться, что ни одна субд их не поддерживает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2019, 13:12 |
|
||
|
Проблема с оптимизацией IS NOT NULL
|
|||
|---|---|---|---|
|
#18+
Konst_Oneимелось ввиду как вы эти данные храните (стуктуру таблиц и их взаимосвязь) А как если не секрет по вашему нужно было структуру таблиц в данном случае организовывать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2019, 14:08 |
|
||
|
Проблема с оптимизацией IS NOT NULL
|
|||
|---|---|---|---|
|
#18+
andy stNitro_Junkieпропущено... С CROSS APPLY дополнили статью. INSTEAD OF это не то в данном случае. Если вы сделаете триггер INSTEAD OF на balance, он не будет вызываться, когда скажем shipmentDetail поменялось, а там именно об этом речь шла. ммм... а давайте придумаем еще еще какие-нибудь свои правила и будем радоваться, что ни одна субд их не поддерживает. Что значит придумывать правила? Допустим вам надо логировать ситуации, когда количество остатка стало меньше 0. Вроде элементарная задача, как ее при помощи INSTEAD OF триггера реализовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2019, 14:10 |
|
||
|
Проблема с оптимизацией IS NOT NULL
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkieandy stпропущено... ммм... а давайте придумаем еще еще какие-нибудь свои правила и будем радоваться, что ни одна субд их не поддерживает. Что значит придумывать правила? Допустим вам надо логировать ситуации, когда количество остатка стало меньше 0. Вроде элементарная задача, как ее при помощи INSTEAD OF триггера реализовать? а делать это на этапе добавления записи, которая может привести к остатку < 0, не? или подразумевается, что кто-то может править содержимое вьюхи в плане изменения остатка? типа чёта мало тут, давай сотку накинем... тогда ребята правильно путём идут бизнес делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2019, 14:22 |
|
||
|
Проблема с оптимизацией IS NOT NULL
|
|||
|---|---|---|---|
|
#18+
andy stNitro_Junkieпропущено... Что значит придумывать правила? Допустим вам надо логировать ситуации, когда количество остатка стало меньше 0. Вроде элементарная задача, как ее при помощи INSTEAD OF триггера реализовать? а делать это на этапе добавления записи, которая может привести к остатку < 0, не? или подразумевается, что кто-то может править содержимое вьюхи в плане изменения остатка? типа чёта мало тут, давай сотку накинем... тогда ребята правильно путём идут бизнес делать. Какой записи? Допустим у вас остаток расчитывается, как-то хитро. Кто-то делает какое-то изменение UPDATE shipmentDetail SET product=54 WHERE id=123 Это для старого товара уменьшит остаток, для нового увеличит. То есть остаток может стать меньше 0, это хочется залогировать (для склада товара), вместе скажем с человеком и изменением которые привели к этому. Если бы можно было сделать триггер на представление balance все делалось бы одной строчкой. А так вариантов которые приведут к тому что останет меньше 0 сотни. Куда что вставлять? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2019, 14:50 |
|
||
|
Проблема с оптимизацией IS NOT NULL
|
|||
|---|---|---|---|
|
#18+
остаток не должен расчитываться, он должен записываться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2019, 14:54 |
|
||
|
Проблема с оптимизацией IS NOT NULL
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieЕсли бы можно было сделать триггер на представление balance все делалось бы одной строчкой.Ну так делайте. Или что-то мешает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2019, 15:53 |
|
||
|
Проблема с оптимизацией IS NOT NULL
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie, Код: sql 1. Вы чего-то не договариваете. У меня план запроса на таблице с индексом по nullable колонке очень простой - constant scan. Скорее всего,выбран тривиальный план. Версия сервера какая, интересно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2019, 16:28 |
|
||
|
Проблема с оптимизацией IS NOT NULL
|
|||
|---|---|---|---|
|
#18+
Konst_Oneостаток не должен расчитываться, он должен записываться Ну для начала определяется как должен рассчитываться, а как записываться это уже следствие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2019, 17:27 |
|
||
|
Проблема с оптимизацией IS NOT NULL
|
|||
|---|---|---|---|
|
#18+
invmNitro_JunkieЕсли бы можно было сделать триггер на представление balance все делалось бы одной строчкой.Ну так делайте. Или что-то мешает? MS SQL не дает триггеры на представления делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2019, 17:28 |
|
||
|
Проблема с оптимизацией IS NOT NULL
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieKonst_Oneостаток не должен расчитываться, он должен записываться Ну для начала определяется как должен рассчитываться, а как записываться это уже следствие. не надо для этого делать представления, программа должна уже расчитанный остаток зхаписывать в отдельную таблицу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2019, 17:31 |
|
||
|
Проблема с оптимизацией IS NOT NULL
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkieinvmпропущено... Ну так делайте. Или что-то мешает? MS SQL не дает триггеры на представления делать. А пацаны то не знали... https://docs.microsoft.com/ru-ru/sql/t-sql/statements/create-trigger-transact-sql?view=sql-server-2017 CREATE [ OR ALTER ] TRIGGER [ schema_name . ]trigger_name ON { table | view } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2019, 17:31 |
|
||
|
Проблема с оптимизацией IS NOT NULL
|
|||
|---|---|---|---|
|
#18+
Владислав КолосовNitro_Junkie, Код: sql 1. Вы чего-то не договариваете. У меня план запроса на таблице с индексом по nullable колонке очень простой - constant scan. Скорее всего,выбран тривиальный план. Версия сервера какая, интересно? Да в том то и проблема, что выбирается тривиальный план. SQL Server (15.0.1700.37) это 2019 preview как я понимаю. Но на эту проблему мне на всех серверах жаловались. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2019, 17:31 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39848254&tid=1687411]: |
0ms |
get settings: |
5ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
207ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 220ms |
| total: | 510ms |

| 0 / 0 |
