Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
как сломать PG index scan по int полю или почему надо проверять диапазоны входных данных
|
|||
|---|---|---|---|
|
#18+
Простой тест. Вот у вас есть страница которая принимает на вход id чего либо (цело число) и идет в таблицу за этим id, и вы даже проверили что у вас на входе число а не черте что. Далее test case: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. пока все ок... а что будет если на вход реально длинное число задать: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. Оооps, а получили то мы upcast к numeric и как итог полный seq scan по таблице, а теперь представим себе что у вас в таблице не 100.000 строк а 100M и размер под 10-100Gb, и что будет с дисками и с процессором у вас если кто то десяток таких страниц откроет. И что грустно мне заявили что working as designed. PS: использование placeholders при отключении server side prepared statement - не спасает. -- Проект с базой но без DBA все равно что автопарк без штатного автомеханика. Ездит пока все не сломается. http://www.postgresql-consulting.ru/services/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2016, 16:06 |
|
||
|
как сломать PG index scan по int полю или почему надо проверять диапазоны входных данных
|
|||
|---|---|---|---|
|
#18+
Maxim Boguk, ай как --то долпайопу гурию smagen пытался пояснить разницу между операндами сравнения со стороны множества и со стороны единичного значения, и почему пж должен , если бы был написан вменяемыми индусами, а не дятлами гуриями, делать примерно так: Код: sql 1. 2. 3. но дятлов гуриев же не переубедить. так что ешьте, что дают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2016, 16:39 |
|
||
|
как сломать PG index scan по int полю или почему надо проверять диапазоны входных данных
|
|||
|---|---|---|---|
|
#18+
Maxim BogukИ что грустно мне заявили что working as designed.Логично. Не полагайся на автоматическое приведение типов, приводи передаваемый параметр к типу поля и получай ошибку, как и в случае передачи любой несовместимой с типом лабуды. Или через свой функцию приведения, которая вернет null::integer. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2016, 17:20 |
|
||
|
как сломать PG index scan по int полю или почему надо проверять диапазоны входных данных
|
|||
|---|---|---|---|
|
#18+
p2.Maxim BogukИ что грустно мне заявили что working as designed.Логично. Не полагайся на автоматическое приведение типов, приводи передаваемый параметр к типу поля и получай ошибку, как и в случае передачи любой несовместимой с типом лабуды. Или через свой функцию приведения, которая вернет null::integer. Это вы авторам 100% известных мне ORM расскажите :). -- Maxim Boguk www.postgresql-consulting.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2016, 22:20 |
|
||
|
как сломать PG index scan по int полю или почему надо проверять диапазоны входных данных
|
|||
|---|---|---|---|
|
#18+
Maxim BogukПроект с базой но без DBA все равно что автопарк без штатного автомеханика. Ездит пока все не сломается. Приходить в такой проект, когда оно уже "готово" и скоро сломается… ощущение неизбежности и бессилия :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2016, 22:53 |
|
||
|
как сломать PG index scan по int полю или почему надо проверять диапазоны входных данных
|
|||
|---|---|---|---|
|
#18+
vyegorov, ять, оптемайзеру теоретически достаточно инфы, чтобы быстро вернуть пустоту, ничего не делая. то , что оптимайзер написан через оппу пень--колоду конечно увеличивает рыночную стоимость тех, кто знает, где именно рыбу заворачивали, но в конечном счете является неутешительной характеристикой и субд, и всех гуриев ея пишущих и пользующих. т.е. таких вещей стесняться надо, а не пяткой себя в хрудь колотить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2016, 00:15 |
|
||
|
как сломать PG index scan по int полю или почему надо проверять диапазоны входных данных
|
|||
|---|---|---|---|
|
#18+
qwwqять, ёптемайзеру теоретически достаточно инфы, чтобы быстро вернуть пустоту, ничего не делая. можно попробовать его принудить известными ему средствами - повесить check на min/max int. Вот только сумеет ли он этот check протолкнуть через каст к numeric. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2016, 00:39 |
|
||
|
как сломать PG index scan по int полю или почему надо проверять диапазоны входных данных
|
|||
|---|---|---|---|
|
#18+
p2., чек даст только границу. сделайте Код: sql 1. -- и получите тот же тупняк, но уже "в границах целого". тут надо в консерватории править. но внутре -- одни консервавторы -- править некому. и задачу осознать и принять к исполнению -- некому вот и плодятся гурии по заворачиванию рыбы на голом месте в случае ларри -- берём индуса , накручиваем ему хвост, и он как миленький пишет разборы всех частных случаев сам, а не конструирует детский конструктор типов кастов и сравнений. херовый, зато универсальный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2016, 11:33 |
|
||
|
как сломать PG index scan по int полю или почему надо проверять диапазоны входных данных
|
|||
|---|---|---|---|
|
#18+
p2.можно попробовать его принудить известными ему средствами - повесить check на min/max int. Вот только сумеет ли он этот check протолкнуть через каст к numeric. если немного извратиться, то да, даже работает: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. где-то в критичных местах прикрыть так можно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2016, 11:41 |
|
||
|
как сломать PG index scan по int полю или почему надо проверять диапазоны входных данных
|
|||
|---|---|---|---|
|
#18+
Alexius, точнее должно быть <= и >= в check для bigint. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2016, 11:55 |
|
||
|
как сломать PG index scan по int полю или почему надо проверять диапазоны входных данных
|
|||
|---|---|---|---|
|
#18+
qwwqp2., чек даст только границу. сделайте Код: sql 1. -- и получите тот же тупняк, но уже "в границах целого". тут надо в консерватории править. но внутре -- одни консервавторы -- править некому. и задачу осознать и принять к исполнению -- некому вот и плодятся гурии по заворачиванию рыбы на голом месте в случае ларри -- берём индуса , накручиваем ему хвост, и он как миленький пишет разборы всех частных случаев сам, а не конструирует детский конструктор типов кастов и сравнений. херовый, зато универсальный. нет оракуля под рукой, но вагную будет index unique scan и table access by rowid как-то так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2016, 15:37 |
|
||
|
как сломать PG index scan по int полю или почему надо проверять диапазоны входных данных
|
|||
|---|---|---|---|
|
#18+
Jonhsonнет оракуля под рукой, но вагную будет index unique scan и table access by rowid в оракле отсутствует честный int4 и другой порядок приведения типов, но ситуация аналогична. Если сделать ключ integer (number) и задать в запросе значение типа binary_float/double: id = 1d, получим приведение айдишника к параметру и full scan. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2016, 16:41 |
|
||
|
как сломать PG index scan по int полю или почему надо проверять диапазоны входных данных
|
|||
|---|---|---|---|
|
#18+
p2.Jonhsonнет оракуля под рукой, но вагную будет index unique scan и table access by rowid в оракле отсутствует честный int4 и другой порядок приведения типов, но ситуация аналогична. Если сделать ключ integer (number) и задать в запросе значение типа binary_float/double: id = 1d, получим приведение айдишника к параметру и full scan. не вполне понятен ваш поток сознания, дайте П ример в студию что вы имеете ввиду ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2016, 16:46 |
|
||
|
как сломать PG index scan по int полю или почему надо проверять диапазоны входных данных
|
|||
|---|---|---|---|
|
#18+
Jonhsonдайте П римерпросто переведи пгшный синтаксис Код: sql 1. на оракловый Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2016, 17:02 |
|
||
|
как сломать PG index scan по int полю или почему надо проверять диапазоны входных данных
|
|||
|---|---|---|---|
|
#18+
опять же оракуля под рукой нет (, но уверен, что to_number() спасёт отца русской демократии ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2016, 17:08 |
|
||
|
как сломать PG index scan по int полю или почему надо проверять диапазоны входных данных
|
|||
|---|---|---|---|
|
#18+
p2., идиотизм заразен, да Предикат TO_BINARY_DOUBLE("xxx"."xxx")=1d, используемый в строке с идентификатором 1 плана выполнения, содержит неявное преобразование типа данных для индексированного столбца "xxx". Это неявное преобразование типа данных не позволяет оптимизатору выбрать индексы для таблицы -- что радует -- что в сракле оно не лучше. ларри забыл накрутить хвоста индусу или решил, что обучение свидетелей заворачиванию рыбы -- оно прибыльнее, чем сделать один раз -- на века, именно там -- где ему место. мелочь, а приятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2016, 17:54 |
|
||
|
как сломать PG index scan по int полю или почему надо проверять диапазоны входных данных
|
|||
|---|---|---|---|
|
#18+
внезапно Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. где т99: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2016, 20:19 |
|
||
|
как сломать PG index scan по int полю или почему надо проверять диапазоны входных данных
|
|||
|---|---|---|---|
|
#18+
Jonhson, вот за что я вас, дятлов, нежно люблю -- так это за готовность нести околесицу, не разобравшись. после приведения любой идиот сможет. пойнт в том, что уже до приведения у оптимайзера достаточно инфы, чтобы поюзать индекс. вот только ни один индус не напрягся -- и в итоге мы, с вами, товарищи дятлы, становимся носителями сакрального знания по поводу правильных приемов заворачивания рыбы. что крайне льстит дятлам, вплоть до внезапности неожиданностей. типа ударения себя пяткой в грудь и патетических восклицаний об ущербности не причастных к. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2016, 20:46 |
|
||
|
как сломать PG index scan по int полю или почему надо проверять диапазоны входных данных
|
|||
|---|---|---|---|
|
#18+
честно говоря не вижу проблемы в приведении типа, нет оно конечно может быть и лучше автоприведение, но вообще-то типы для того и изобрели, что-бы отличать данные. И вот вам пример, гораздо менее надуманный и более жизненный: Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2016, 01:10 |
|
||
|
как сломать PG index scan по int полю или почему надо проверять диапазоны входных данных
|
|||
|---|---|---|---|
|
#18+
Jonhsonчестно говоря не вижу проблемы в приведении типа, нет оно конечно может быть и лучше автоприведение, но вообще-то типы для того и изобрели, что-бы отличать данные. И вот вам пример, гораздо менее надуманный и более жизненный: Код: sql 1. у PG кстати тут Index scan будет. А про приведение типов - это вы расскажите авторам 100% известных мне ORM которые суют в запросы что ни попадя и про проверку или приведение типов - не думают. PS: забавно Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Maxim Boguk www.postgresql-consulting.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2016, 10:05 |
|
||
|
как сломать PG index scan по int полю или почему надо проверять диапазоны входных данных
|
|||
|---|---|---|---|
|
#18+
Maxim Bogukу PG кстати тут Index scan будет. если кажете, как сделать Код: sql 1. без заморочек я попробую прочекать А про приведение типов - это вы расскажите авторам 100% известных мне ORM которые суют в запросы что ни попадя и про проверку или приведение типов - не думают. это же хорошо, нам с вами больше работы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2016, 10:00 |
|
||
|
как сломать PG index scan по int полю или почему надо проверять диапазоны входных данных
|
|||
|---|---|---|---|
|
#18+
generate_series, нашёл ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2016, 10:18 |
|
||
|
как сломать PG index scan по int полю или почему надо проверять диапазоны входных данных
|
|||
|---|---|---|---|
|
#18+
действительно, в случае варчара срабатывает, единственное, что смущает, так это почему Код: sql 1. , а не Код: sql 1. ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2016, 10:25 |
|
||
|
как сломать PG index scan по int полю или почему надо проверять диапазоны входных данных
|
|||
|---|---|---|---|
|
#18+
qwwq пойнт в том, что уже до приведения у оптимайзера достаточно инфы, чтобы поюзать индекс. вот только ни один индус не напрягся -- и в итоге мы, с вами, товарищи дятлы, становимся носителями сакрального знания по поводу правильных приемов заворачивания рыбы. что крайне льстит дятлам, вплоть до внезапности неожиданностей. Ну да .... Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2016, 17:25 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=39261979&tid=1997143]: |
0ms |
get settings: |
12ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
184ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
| others: | 266ms |
| total: | 563ms |

| 0 / 0 |
