Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: В каких СУБД есть такая штука...  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
scf
О каком типе индекса идет речь? Назовите алгоритм или название базы+название типа индекса.


MS SQL Server. B-tree.
3 дек 14, 23:35    [16946939]     Ответить | Цитировать Сообщить модератору
 Re: В каких СУБД есть такая штука...  [new]
Вася Уткин
Guest
pkarklin
scf,

Восстановите мне, пожалуйста, исходные данные индекса, полученного перемножением двух интовых полей, в значение ключа которого 12.

Не, они видите что говорит, что помимо того что индекс будет построен, так ещё в листьях индекса будет храниться это число 12, это помимо двух интовых полей :)
3 дек 14, 23:35    [16946940]     Ответить | Цитировать Сообщить модератору
 Re: В каких СУБД есть такая штука...  [new]
scf
Member

Откуда:
Сообщений: 1486
pkarklin
scf
О каком типе индекса идет речь? Назовите алгоритм или название базы+название типа индекса.


MS SQL Server. B-tree.


Отлично, а при чем тут перемножение целых чисел?
3 дек 14, 23:38    [16946945]     Ответить | Цитировать Сообщить модератору
 Re: В каких СУБД есть такая штука...  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
scf
Отлично, а при чем тут перемножение целых чисел?


Приведите другой пример, такого индекса:

scf
Т.е. такие колонки можно использовать в WHERE (по ним есть индекс) но нельзя использовать в SELECT (в них нет данных).
Смысл том, чтобы хранить в базе только индекс для ускорения работы и уменьшения размера базы.
3 дек 14, 23:47    [16946971]     Ответить | Цитировать Сообщить модератору
 Re: В каких СУБД есть такая штука...  [new]
miksoft
Member

Откуда:
Сообщений: 38919
Dimitry Sibiryakov
Function Based Index - в любой приличной СУБД.
В MySQL нету.
3 дек 14, 23:48    [16946975]     Ответить | Цитировать Сообщить модератору
 Re: В каких СУБД есть такая штука...  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54784

scf
Первая строчка из цитаты относится к B-tree
Вторая строчка из цитаты относится к case-insensitive индексам

А Вы, стало быть, утверждаете, что B-tree индексы не могут быть регистронечуствительными.
Ню-ню...

PS: А вообще, я сильно сомневаюсь, что какая нибудь СУБД позволит создать таблицу, которая
гарантированно не переживёт export-import, которую нельзя задействовать в репликации или
standby.

Posted via ActualForum NNTP Server 1.5

3 дек 14, 23:51    [16946979]     Ответить | Цитировать Сообщить модератору
 Re: В каких СУБД есть такая штука...  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4257
pkarklin
scf
О каком типе индекса идет речь? Назовите алгоритм или название базы+название типа индекса.


MS SQL Server. B-tree.


B+ Tree
4 дек 14, 05:52    [16947223]     Ответить | Цитировать Сообщить модератору
 Re: В каких СУБД есть такая штука...  [new]
кхм
Guest
scf
как колонки, которые не хранят вставленные данные, но по которым можно строить индексы.

<>
кхм, стесняюсь спьясить,
мальчик , ты дуяк ?

в общем ты хочешь index (F(x))
но так, чтобы от хранимого в индексе F(x) было затруднительно на стороне сервера, не зная способа F делать x= F-1(Y), но при этом уметь таки поиск по x. (т.е. знать таки F) --> противоречие

которое частично снимается "алгоритимически сложным" кодированием/декодированием. но кодировать все равно должно быть возможно на стороне делающей where F(x). А вот декодиявать должно быть алгоитмически сьёжно
4 дек 14, 08:25    [16947333]     Ответить | Цитировать Сообщить модератору
 Re: В каких СУБД есть такая штука...  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3148
Блог
scf
В каких СУБД есть такая штука как колонки, которые не хранят вставленные данные, но по которым можно строить индексы.

Т.е. такие колонки можно использовать в WHERE (по ним есть индекс) но нельзя использовать в SELECT (в них нет данных).
Смысл том, чтобы хранить в базе только индекс для ускорения работы и уменьшения размера базы. Это может быть полезно, например, для построения индексов для данных, хранящихся в виде BLOB-ов.
СУБД Caché (разделы "Скрытие чувствительных данных")
Я такую штуку использовал именно для индексации blob-ов (фото), для быстрого поиска похожих лиц.
4 дек 14, 10:03    [16947627]     Ответить | Цитировать Сообщить модератору
 Re: В каких СУБД есть такая штука...  [new]
host.13
Member

Откуда:
Сообщений: 263
То есть речь все-таки не про индексы без данных, а про индексы, построенные по существующим где-либо (не обязательно в данной БД) данным? Если так, то эти индексы - не индексы, а данные, по которым при желании можно еще построить индексы.
4 дек 14, 10:18    [16947694]     Ответить | Цитировать Сообщить модератору
 Re: В каких СУБД есть такая штука...  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34709
scf
как колонки, которые не хранят вставленные данные, но по которым можно строить индексы.

Т.е. такие колонки можно использовать в WHERE (по ним есть индекс) но нельзя использовать в SELECT (в них нет данных).
Смысл том, чтобы хранить в базе только индекс для ускорения работы и уменьшения размера базы. Это может быть полезно, например, для построения индексов для данных, хранящихся в виде BLOB-ов.


в Virtuoso реализованы индексы без ссылки на исходную запись . нужно это тупо для экономии места, т.е.такой индекс может использоваться только как покрывающий (запрос).

но тем не менее в Select list его можно использовать, как и в Where.

это вообще странное требование автора вопроса.

в FBI и индексах на выражения в оракл такое соблюдается, но автору все равно вроде не нравится.
8 дек 14, 07:31    [16964421]     Ответить | Цитировать Сообщить модератору
 Re: В каких СУБД есть такая штука...  [new]
Сергей Арсеньев
Member

Откуда:
Сообщений: 4118
кхм
в общем ты хочешь index (F(x))
но так, чтобы от хранимого в индексе F(x) было затруднительно на стороне сервера, не зная способа F делать x= F-1(Y), но при этом уметь таки поиск по x.


Нет - человек хочет поиск по F(X). Другими словами ему нужен виртуальные столбцы {x} в которые он будет записывать значения, а в хранится будет только F({x}).

Собственно в том же Oracle делается при помощи View поверх IOT с полем F и instead of триггерах on insert,update, в которых :new.F=F({x}).
9 дек 14, 13:06    [16971609]     Ответить | Цитировать Сообщить модератору
 Re: В каких СУБД есть такая штука...  [new]
кхм
Guest
Сергей Арсеньев
кхм
в общем ты хочешь index (F(x))
но так, чтобы от хранимого в индексе F(x) было затруднительно на стороне сервера, не зная способа F делать x= F-1(Y), но при этом уметь таки поиск по x.


Нет - человек хочет поиск по F(X). Другими словами ему нужен виртуальные столбцы {x} в которые он будет записывать значения, а в хранится будет только F({x}).

Собственно в том же Oracle делается при помощи View поверх IOT с полем F и instead of триггерах on insert,update, в которых :new.F=F({x}).
тот же хрен, вид сбоку

он хочет по табле с индексом F(x) искать , имея на руках x, а не F(x).
т.е. он на руках должен иметь и саму производящую ф-ю F() [но хочет иметь проблемы с восстановлением x из F]. об чем и речь.

ну там еще ф-ии бывают типа биекциями, и типа нет (кодирование с потерей данных). он кажется таки хочет без потери. А это значит, что он на руках должен иметь и производящую ф-ю, которой достаточно для восстановления обратной (хотя бы на конечном мн-ве значений), но , разве что, алгоритмически затруднено. Т.е. он, де факто, битым, но алгоритмически трудно-восстановимым словом хранит в таблице собственно и именно само "x"
ну, и т.п.

а что там делает ара-кал, и куда он пошёл -- это дело десятое. "вопрос реализации" , с чем у ларри большие успехи. в некотором смысле.
9 дек 14, 13:21    [16971739]     Ответить | Цитировать Сообщить модератору
 Re: В каких СУБД есть такая штука...  [new]
Сергей Арсеньев
Member

Откуда:
Сообщений: 4118
кхм
тот же хрен, вид сбоку

Функцию то он знает. Поэтому можно сделать where F_field=F(X).

В, принципе, в СУБД, в которых есть табличные функции, можно сделать выборку из табличной функции, которая будет принимать параметры и строить таблицу с результатом, спрятав вышеуказанное условие, только с теми полями, которые храняться.

Что-то типа select * from table(giv_me_table({x})) даже в where не нужно ничего указывать.

Ну или использовать СУБД с переопределяемыми на лету запросами (которые вместо одного подставляют другой).

Только вот зачем?
9 дек 14, 15:16    [16972607]     Ответить | Цитировать Сообщить модератору
 Re: В каких СУБД есть такая штука...  [new]
scf
Member

Откуда:
Сообщений: 1486
Нет, никаких функций.
Идея этого вопроса в том, что для поиска по b-tree индексу чтение собственно строки данных не требуется, даже если нужная колонка не перенесена в индекс.

Контр-довод, который я смог найти: такая штука будет плохо работать с селектом по двум полям. Это обычно резолвится в выборку по первому индексу + table scan, а в моем случае получаем безальтернативно выборку по каждому индексу и их hash join, что намного затратнее.
9 дек 14, 22:42    [16974572]     Ответить | Цитировать Сообщить модератору
 Re: В каких СУБД есть такая штука...  [new]
Вася Уткин
Guest
scf
Нет, никаких функций.
Идея этого вопроса в том, что для поиска по b-tree индексу чтение собственно строки данных не требуется, даже если нужная колонка не перенесена в индекс.

Контр-довод, который я смог найти: такая штука будет плохо работать с селектом по двум полям. Это обычно резолвится в выборку по первому индексу + table scan, а в моем случае получаем безальтернативно выборку по каждому индексу и их hash join, что намного затратнее.

Ответьте четко на 3 вопроса:
1. Что такое Index Only Scan?
2. Что содержится в B-tree индексе, перечислите?
2.a) b-tree (сам индекс)
2.b) помимо самого индекса, в листьях содержаться ещё и поля по которым он построен
2.c) в листьях rowid (ссылка на строку в таблице)
3. Что содержится в Index Organized Table?
3.a) b-tree (сам индекс)
3.b) помимо самого индекса, в листьях содержаться ещё и поля по которым он построен
3.c) в листьях остальные столбцы, исключая индекс

Если в 2 нет 2.b), то в 3 так же нет 3.b), т.к. формально эти структуры идентичны, т.е. IOT - то что вы ищете (а возможность получать поля в select просто приятный бонус, который вам не нужен).
Если в 2 нет 2.b), то Index Only Scan - это получение в select полей содержащихся исключительно в самом B-tree индексе, а не в его листьях?
Есть ли 2.b) в 2?
9 дек 14, 23:01    [16974643]     Ответить | Цитировать Сообщить модератору
 Re: В каких СУБД есть такая штука...  [new]
scf
Member

Откуда:
Сообщений: 1486
Вася Уткин,

1. как подсказал гугль:
https://wiki.postgresql.org/wiki/Index-only_scans
"Btree indexes contain what are technically redundant copies of the column data that is indexed."

Я так думаю, что 2.c
Судя по докам оракла, 3.b

Насчет того, что IOT - это то, что мне нужно.
b-tree - это дерево, проходом по которому из вершины в лист можно "собрать" значение, по которому этот индекс был построен. Судя по вышеприведенной доке постгреса, они именно это и делают.
оракловый IOT меня смущает тем, что в документации *явно* написано, что в индекс включают данные колонки, что избыточно (см. цитату в кавычках выше)
9 дек 14, 23:20    [16974710]     Ответить | Цитировать Сообщить модератору
 Re: В каких СУБД есть такая штука...  [new]
scf
Member

Откуда:
Сообщений: 1486
Вася Уткин,

Вообще Index Only Scan - это, похоже, именно то, что я ищу. Разве что без опции "не хранить эти данные в таблице".
Есть ли аналогичная штука в оракле?
9 дек 14, 23:22    [16974715]     Ответить | Цитировать Сообщить модератору
 Re: В каких СУБД есть такая штука...  [new]
scf
Member

Откуда:
Сообщений: 1486
http://www.dba-oracle.com/concepts/index_only_tables.htm
Вот интересная ссылка в тему...
9 дек 14, 23:26    [16974733]     Ответить | Цитировать Сообщить модератору
 Re: В каких СУБД есть такая штука...  [new]
Вася Уткин
Guest
scf
Вася Уткин,

1. как подсказал гугль:
https://wiki.postgresql.org/wiki/Index-only_scans
"Btree indexes contain what are technically redundant copies of the column data that is indexed."

Я так думаю, что 2.c
Судя по докам оракла, 3.b

Насчет того, что IOT - это то, что мне нужно.
b-tree - это дерево, проходом по которому из вершины в лист можно "собрать" значение, по которому этот индекс был построен. Судя по вышеприведенной доке постгреса, они именно это и делают.
оракловый IOT меня смущает тем, что в документации *явно* написано, что в индекс включают данные колонки, что избыточно (см. цитату в кавычках выше)

Как вы перевели эту цитату?

В оракловой документации "*явно* написано", что содержится явно копия поля, или что содержится само поле?
Если "содержится само поле", то это и означает, что "дерево, проходом по которому из вершины в лист можно "собрать" значение, по которому этот индекс был построен."
9 дек 14, 23:30    [16974748]     Ответить | Цитировать Сообщить модератору
 Re: В каких СУБД есть такая штука...  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54784

scf
b-tree - это дерево, проходом по которому из вершины в лист можно "собрать"
значение, по которому этот индекс был построен.

В общем случае - нельзя. Потому что индекс строится не по значению, а по ключу.
Преобразование значения в ключ может быть, а может и не быть обратимым. Так что из индекса
можно получить ключ, но не значение.

Posted via ActualForum NNTP Server 1.5

9 дек 14, 23:33    [16974755]     Ответить | Цитировать Сообщить модератору
 Re: В каких СУБД есть такая штука...  [new]
Вася Уткин
Guest
scf
Вася Уткин,

Вообще Index Only Scan - это, похоже, именно то, что я ищу. Разве что без опции "не хранить эти данные в таблице".
Есть ли аналогичная штука в оракле?

Да, долго IOS (в виш листах лет 5 наверно висел) и no-logged tables рожали в PostgreSQL, но если бы ещё запилили и Intra Query Parallelism - стало возможным использовать PostgreSQL в ETL/DWH :)
9 дек 14, 23:34    [16974757]     Ответить | Цитировать Сообщить модератору
 Re: В каких СУБД есть такая штука...  [new]
Вася Уткин
Guest
Dimitry Sibiryakov
scf
b-tree - это дерево, проходом по которому из вершины в лист можно "собрать"
значение, по которому этот индекс был построен.

В общем случае - нельзя. Потому что индекс строится не по значению, а по ключу.
Преобразование значения в ключ может быть, а может и не быть обратимым. Так что из индекса
можно получить ключ, но не значение.

А значение ключа можно получить?
9 дек 14, 23:35    [16974760]     Ответить | Цитировать Сообщить модератору
 Re: В каких СУБД есть такая штука...  [new]
scf
Member

Откуда:
Сообщений: 1486
Я так понял, что под "значением" подразумевается значение колонки, а под "ключом" - преобразованное значение, по которому строится индекс и которое собственно в этом индексе ищется. Например, ключ = uppercase(значение) для case-insensitive индексов.

Но дело-то в том, что читать "значение" мне нафиг не нужно) Мне бы только rowid узнать, чтобы мирно прочитать мой блоб из тейблспейса.

Насчет IOT - я так думаю, что данные все-таки дублируются, т.е. хранятся и в индексе, и в таблице. Иначе full scan таблицы потребует чтения из двух разных мест.
9 дек 14, 23:41    [16974775]     Ответить | Цитировать Сообщить модератору
 Re: В каких СУБД есть такая штука...  [new]
Вася Уткин
Guest
scf
Я так понял, что под "значением" подразумевается значение колонки, а под "ключом" - преобразованное значение, по которому строится индекс и которое собственно в этом индексе ищется. Например, ключ = uppercase(значение) для case-insensitive индексов.

Но дело-то в том, что читать "значение" мне нафиг не нужно) Мне бы только rowid узнать, чтобы мирно прочитать мой блоб из тейблспейса.

Насчет IOT - я так думаю, что данные все-таки дублируются, т.е. хранятся и в индексе, и в таблице. Иначе full scan таблицы потребует чтения из двух разных мест.

IOT - это B-tree индекс в листьях которого нет rowid, но есть все поля за исключением содержащихся в индекс, т.е. IOT это одна структура в которой все есть, какие ещё два разных места?
9 дек 14, 23:46    [16974790]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Сравнение СУБД Ответить