|
Миграция с Oracle на Postgres
|
|||
---|---|---|---|
#18+
Тут опять надо сравнивать разные DBMS. http://stackoverflow.com/questions/556363/space-used-by-nulls-in-database In Oracle, it depends on type of the column and its position in the row. If the NULL columns are last in the row, then they don't take any space at all. Oracle prepends the total row size to each row, everything that doesn't fit is considered NULL. If there is some non-NULL data after a NULL column, then the NULL is stored as a single byte of 0xFF (that is, NULL type). Empty VARCHAR2 is equivalent to NULL. If you test the type of a literal NULL returned from SELECT list, it will give you a VARCHAR2(0) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2016, 16:39 |
|
Миграция с Oracle на Postgres
|
|||
---|---|---|---|
#18+
Victor Metelitsa В самом деле, бывают случаи, когда выгодно NULL'ы индексировать, и бывают случая, когда выгодно, чтобы NULL'ов не было. Если выбирать одно из двух, то сложно сказать, что предпочесть. И хорошо, когда есть обе возможности. ога, помню как у нас неделю висел труп программиста заюзавшего в мсскл "обе возможности" set ansi null жестокая была смерть ... ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2016, 17:08 |
|
Миграция с Oracle на Postgres
|
|||
---|---|---|---|
#18+
xtenderИ вообще смешно все это смешно Судя по вашим придиркам в оракле все очень и очень хорошо, если докапываетесь только до индексирования NULL'ов Нет ничего такого, где всё было бы хорошо. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2016, 22:04 |
|
Миграция с Oracle на Postgres
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakovxtenderесли зная это размещать опциональные nullable поля последними, то и размер базы уменьшается и нагрузка на процессор снижается. Ну да, на каждый NULL же тратится целый бит. Или всё ещё байт?.. Интереснее то, что для типичных условий a la where x = ?, where x < ? и т.п., null'ы в колонке X в самом деле не нужны и в Oracle иногда можно на этом очень неплохо выиграть. А ещё можно реализовать такие unique constraint'ы, когда можно запихать в колонку неограниченное количество null'ов (а когда null'ы индексируются, получается, что один null равен другому и более одного не запихать). Неудобно же, когда условия выглядят как where x is null (workaround'ы мне кажутся неизящненькими; однако заметим, что для условий наподобие where x is null and y = ? ораклячьи индексы очень наже годятся, ибо в индексе по (y,x) нужные null'ы проиндексируются). Теперь надо как-то считать - для скольких запросов отсутствие null'ов в индексе помогает, для скольких мешает, какова величина помощи/помехи, какова критичность того или иного запроса. Как много людей считали такую статистику для своих приложений? Мне кажется, что where x is null характерны больше для админских/разработческих дел, одноразовых запросов, но не для готовых приложений (исключая, быть может, эмуляцию not exists через внешнее соединение xxx left join yyy on xxx.x=yyy.x where yyy.x is null, причём там от индекса по yyy(x) отнюдь не требуется хранение null'лв). ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2016, 22:35 |
|
Миграция с Oracle на Postgres
|
|||
---|---|---|---|
#18+
Модератор: Victor Metelitsa, мы просим вас не писать сообщения которые не имеют отношения к Сравнению СУБД ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2016, 00:33 |
|
Миграция с Oracle на Postgres
|
|||
---|---|---|---|
#18+
Использовал обыкновеннейшую, безобиднейшую, всем известную поговорку "В огороде бузина, а в Киеве дядька", только слегка модернизированную (любой вспомнит то, что я вспомнил). В самом деле, что бы ни имелось в виду под "set ansi nulll" в MS SQL (я не в курсе), особой связи с возможностью индексировать в DB2 так и эдак не прослеживается. Если (предположим) set ansi null в MS SQL повлияет на семантику запросов, потенциальую выдачу неправильных результатов, то DB2-шные индексы повлияют всего лишь на производительность. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2016, 11:28 |
|
Миграция с Oracle на Postgres
|
|||
---|---|---|---|
#18+
Victor MetelitsaЕсли (предположим) set ansi null в MS SQL повлияет на семантику запросов Ага, он от этого внезапно перестанет имитировать Оракула с его неразличением NULL и пустой строки. Естественно у пифий от этого срывает крышу и они превращаются в гарпий. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2016, 12:16 |
|
Миграция с Oracle на Postgres
|
|||
---|---|---|---|
#18+
Victor MetelitsaА ещё можно реализовать такие unique constraint'ы, когда можно запихать в колонку неограниченное количество null'ов (а когда null'ы индексируются, получается, что один null равен другому и более одного не запихать). хотите сказать, что СУБД индексирующие NULL этого сделать не могут? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2016, 13:37 |
|
Миграция с Oracle на Postgres
|
|||
---|---|---|---|
#18+
Симонов ДенисVictor MetelitsaА ещё можно реализовать такие unique constraint'ы, когда можно запихать в колонку неограниченное количество null'ов (а когда null'ы индексируются, получается, что один null равен другому и более одного не запихать). хотите сказать, что СУБД индексирующие NULL этого сделать не могут? DB2 это делать не могла. http://www.ibm.com/support/knowledgecenter/SSEPGG_10.5.0/com.ibm.db2.luw.sql.ref.doc/doc/r0000919.html?cp=SSEPGG_10.5.0/2-12-7-80 When UNIQUE is used, null values are treated as any other values. For example, if the key is a single column that may contain null values, that column may contain no more than one null value.(имеет смысл, когда не EXCLUDE NULL KEYS, который Specifies that an index entry is not created when all parts of the index key contain the null value.) ну, правда, в явном виде unique-constraint там вообще http://www.ibm.com/support/knowledgecenter/SSEPGG_10.5.0/com.ibm.db2.luw.sql.ref.doc/doc/r0000927.html?cp=SSEPGG_10.5.0/2-12-7-101 UNIQUE (column-name, ...) Defines a unique key composed of the identified columns. The identified columns must be defined as NOT NULL. но я про constraints в широком смысле. а про "все СУБД, индексирующие NULL'ы" или "IBM-еры в принципе не могли бы это реализовать, даже если бы захотели", естественно, такое говорить глупо. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2016, 15:02 |
|
Миграция с Oracle на Postgres
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovТак любому значению можно от балды назначить любой удобный процент распределения и объявить, что его включение в индекс бессмысленно. Одолел. Да, бессмысленно. Хочешь убедиться? Собери таблицу на несколько десятков/сотен лямов, в которой столбец имеет 10 уникальных значений. Проиндексируй этот столбец и посмотри план селекта с предикатом по данному столбцу. Там будет фуллскан. Потому что дешевле сделать "<кол-во блоков данных, занимаемых таблицей>/DB_MULTIBLOCK_READ_COUNT" обращений к диску, чем несколько млн вытаскиваний по индексному чтению. Можешь, если очень уж упорот упёрт, влупить хинт, принуждающий бежать по индексу, и снять тайминг времени выполнения суммирования по всей таблице. Сто раз же разжеваны вопросы селективности индекса и ее влияния на эффективность использования индексов... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2016, 13:53 |
|
Миграция с Oracle на Postgres
|
|||
---|---|---|---|
#18+
Старый индексаторСто раз же разжеваны вопросы селективности индекса и ее влияния на эффективность использования индексов... Индексатор такой старый, что не слышал о гистограммах?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2016, 14:07 |
|
Миграция с Oracle на Postgres
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovСтарый индексаторСто раз же разжеваны вопросы селективности индекса и ее влияния на эффективность использования индексов... Индексатор такой старый, что не слышал о гистограммах?.. Еще как слышал. Только тебе талдычат про нецелесообразность индексирования NULL, когда его отнюдь не скромный процент от общего числа индексируемых строк, и про целесообразность его превращения в не-NULL когда процент содержащих его строк мал, вследствие чего индексирование FBI вида Nvl(This_Col,'IT IS NULL!!!') повлияет на объем быстродействие индекса в пренебрежимо малой степени. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2016, 15:59 |
|
Миграция с Oracle на Postgres
|
|||
---|---|---|---|
#18+
"Пони бегает по кругу и в уме круги считает..." (с) Старый индексаторТолько тебе талдычат про нецелесообразность индексирования NULL, когда его отнюдь не скромный процент от общего числа индексируемых строк С какого перепугу именно селективность NULL считается априори не скромной, а для "1" или "2" - всё в порядке и в индекс они всегда включаются? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2016, 16:17 |
|
Миграция с Oracle на Postgres
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov"Пони бегает по кругу и в уме круги считает..." (с) Старый индексаторТолько тебе талдычат про нецелесообразность индексирования NULL, когда его отнюдь не скромный процент от общего числа индексируемых строк С какого перепугу именно селективность NULL считается априори не скромной, а для "1" или "2" - всё в порядке и в индекс они всегда включаются? А с какого перепугу ты решил что я утверждаю это? Ты мой пост нечитал? Там про 10 уникальных значений , если что, и про то, что далеко не всегда нужен индекс... И таки да - тебе уже сказали что искать по "Where ... IS NULL" когда пустых большинство - бессмысленно, а когда их мало - целесообразно использовать вместо них осмысленные значения (которые войдут в индекс). Какие из букв тебе непонятны? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2016, 16:50 |
|
Миграция с Oracle на Postgres
|
|||
---|---|---|---|
#18+
Старый индексаторКакие из букв тебе непонятны? Откуда взять магическое значение, которое не пересечётся с любым другим значением в полном диапазоне конкретного типа данных. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2016, 16:58 |
|
Миграция с Oracle на Postgres
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovСтарый индексаторКакие из букв тебе непонятны? Откуда взять магическое значение, которое не пересечётся с любым другим значением в полном диапазоне конкретного типа данных. В справочнике, являющимся источником LOV, предусмотреть оное. Как будто первый раз замужем, ей-богу... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2016, 17:27 |
|
Миграция с Oracle на Postgres
|
|||
---|---|---|---|
#18+
Неиндексирование null-ов - это такие пустяки, мелкое раздражение (с вещами вроде отсутствия log'ов у Firebird'а совершенно не сопоставимо). На этом можно придумывать занятные трюки. Вот так, например: пусть поле f принимает значения 'A', 'B', 'C', ... и "почти всегда" в нём 'A', а нам нужно выбрать where f <> 'A' Antognini описывает такой подход: сделать индекс по nullif(f, 'A') и выбирать where not nullif(f, 'A') is null. Изящное решение, малюсенький индекс. Но, правда, не помню, чтобы мне когда-то приходилось применять такое на практике. В типичных запросах эта особенность Oracle как-то незаметна. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2016, 10:58 |
|
|
start [/forum/topic.php?fid=35&msg=39188306&tid=1552283]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
162ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 236ms |
total: | 498ms |
0 / 0 |