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

Откуда:
Сообщений: 888
Имеется таблица со скажем 1Мио рекордс,
и на ету таблицу иногда проиходят запросы вида


Oracle:
select * from (select * from strange_table where field0=0 order by field1) s
where rownum < 100;

MS/SA

select top 100 *
from strange_table where field0=0 order by field1
;


Хочется индекса для оптимизации выборки,
но только для выборочных данных, которые удовлетворяют заранее уаказанному условию. strange_table.field0=0
т.е. Индекс для данных, не удовлетворяющих условию, смысла не имеет.

Интересует, кто и как хорошо поддерживает такие странности
13 июл 10, 12:50    [9094389]     Ответить | Цитировать Сообщить модератору
 Re: Какая DBMS поддерживает создание индексов на часть данных?  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 32892

Hello, mikron!
You wrote on Tue, 13 Jul 10 09:50:47 GMT:

mikron
m> Интересует, кто и как хорошо поддерживает такие странности
современная психиатрия.
АднАзнАчнА!

--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.4

13 июл 10, 12:57    [9094473]     Ответить | Цитировать Сообщить модератору
 Re: Какая DBMS поддерживает создание индексов на часть данных?  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
Sql Server 2008 - filtered index
13 июл 10, 12:59    [9094496]     Ответить | Цитировать Сообщить модератору
 Re: Какая DBMS поддерживает создание индексов на часть данных?  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
Oracle FBI
13 июл 10, 13:24    [9094769]     Ответить | Цитировать Сообщить модератору
 Re: Какая DBMS поддерживает создание индексов на часть данных?  [new]
mikron
Member

Откуда:
Сообщений: 888
Gluk (Kazan),

Ищется аналог вот такому

create index strange_table_i01 on strange_table(field1) where field0 = 0;
Мне на ум только мат. представления приходят, но ето не совсем то, что надо.

Покажи пожалуста, как это делается с FBI.
13 июл 10, 13:39    [9094920]     Ответить | Цитировать Сообщить модератору
 Re: Какая DBMS поддерживает создание индексов на часть данных?  [new]
Anddros
Member

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

Если не ошибаюсь, то с версии 2.0. Это примерно 1990 год. :)
13 июл 10, 13:43    [9094970]     Ответить | Цитировать Сообщить модератору
 Re: Какая DBMS поддерживает создание индексов на часть данных?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
mikron
Gluk (Kazan),

Ищется аналог вот такому

create index strange_table_i01 on strange_table(field1) where field0 = 0;
Мне на ум только мат. представления приходят, но ето не совсем то, что надо.

Покажи пожалуста, как это делается с FBI.


Ну, практически так в MS SQL^

CREATE NONCLUSTERED INDEX "FIBillOfMaterialsWithEndDate"
    ON Production.BillOfMaterials (ComponentID, StartDate)
    WHERE EndDate IS NOT NULL;
13 июл 10, 13:44    [9094981]     Ответить | Цитировать Сообщить модератору
 Re: Какая DBMS поддерживает создание индексов на часть данных?  [new]
Le Peace
Member

Откуда: Москва
Сообщений: 8969
mikron

Покажи пожалуста, как это делается с FBI.

case when field0 = 0 then field1 else null end
13 июл 10, 13:49    [9095050]     Ответить | Цитировать Сообщить модератору
 Re: Какая DBMS поддерживает создание индексов на часть данных?  [new]
Anddros
Member

Откуда:
Сообщений: 1077
foxpro
select strange_table
index on field1 tag strange_table_i01 for field0 = 0
Если ничего не напутал в синтаксисе. Давно это было... :)
13 июл 10, 13:52    [9095085]     Ответить | Цитировать Сообщить модератору
 Re: Какая DBMS поддерживает создание индексов на часть данных?  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34709

mikron wrote:

> Интересует, кто и как хорошо поддерживает такие странности

Вроде бы как в PostgreSQL такое есть. Больше не слыхал.

Posted via ActualForum NNTP Server 1.4

13 июл 10, 16:07    [9096685]     Ответить | Цитировать Сообщить модератору
 Re: Какая DBMS поддерживает создание индексов на часть данных?  [new]
ОКТОГЕН
Member

Откуда:
Сообщений: 2498
MasterZiv,
ага
13 июл 10, 16:45    [9097048]     Ответить | Цитировать Сообщить модератору
 Re: Какая DBMS поддерживает создание индексов на часть данных?  [new]
Apex
Member

Откуда: Made in USSR
Сообщений: 3910
Мимопроходящий

Hello, mikron!
You wrote on Tue, 13 Jul 10 09:50:47 GMT:

mikron
m> Интересует, кто и как хорошо поддерживает такие странности
современная психиатрия.
АднАзнАчнА!

--
With best regards, Мимопроходящий.


Не нужно судить о людях по себе, а обо всех СУБД по FireBird. Спасибо.

В сабж: Терадата поддерживает такие индексы, называется Sparse Join Index
CREATE JOIN INDEX j1 AS
SELECT storeid, deptid, SUM(sales_dollars) AS sum_sd
FROM sales
WHERE EXTRACT(year FROM sales_date) = 2000
GROUP BY storeid, deptid;
13 июл 10, 18:12    [9097844]     Ответить | Цитировать Сообщить модератору
 Re: Какая DBMS поддерживает создание индексов на часть данных?  [new]
Apex
Member

Откуда: Made in USSR
Сообщений: 3910
Le Peace
mikron

Покажи пожалуста, как это делается с FBI.

case when field0 = 0 then field1 else null end

И толку от этого для вышеприведенных запросов - ноль.
Аналогом такого для данной задачи в Оракле будет только MV.
13 июл 10, 18:19    [9097873]     Ответить | Цитировать Сообщить модератору
 Re: Какая DBMS поддерживает создание индексов на часть данных?  [new]
Dimitry Sibiryakov
Member

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

Apex

Аналогом такого для данной задачи в Оракле будет только MV.

View - понятно, а материализовать-то его зачем?

Posted via ActualForum NNTP Server 1.4

13 июл 10, 19:05    [9098107]     Ответить | Цитировать Сообщить модератору
 Re: Какая DBMS поддерживает создание индексов на часть данных?  [new]
Apex
Member

Откуда: Made in USSR
Сообщений: 3910
Dimitry Sibiryakov

Apex

Аналогом такого для данной задачи в Оракле будет только MV.

View - понятно, а материализовать-то его зачем?

Вы что, правда не понимаете?
13 июл 10, 19:53    [9098288]     Ответить | Цитировать Сообщить модератору
 Re: Какая DBMS поддерживает создание индексов на часть данных?  [new]
Senya_L
Member

Откуда: Москва
Сообщений: 5381
Dimitry Sibiryakov

Apex

Аналогом такого для данной задачи в Оракле будет только MV.

View - понятно, а материализовать-то его зачем?
Чтобы поиск был быстрее. Например, поиск с предикатом IS NOT NULL или по полю в котором всего два значение. Обычные индексы здесь пасуют.
13 июл 10, 19:58    [9098296]     Ответить | Цитировать Сообщить модератору
 Re: Какая DBMS поддерживает создание индексов на часть данных?  [new]
Apex
Member

Откуда: Made in USSR
Сообщений: 3910
Senya_L
Dimitry Sibiryakov

Apex

Аналогом такого для данной задачи в Оракле будет только MV.

View - понятно, а материализовать-то его зачем?
Чтобы поиск был быстрее. Например, поиск с предикатом IS NOT NULL или по полю в котором всего два значение. Обычные индексы здесь пасуют.

Нет, не для этого. И то, что вы сейчас написали про индексы - не совсем верно, т.к. в определенных ситуациях в Оракле специально под предикат IS NOT NULL создают индекс, который очень эффективен (помним, что Оракл не хранит Null индексе), а для полей с низкой селекивностью существуют Bitmap индексы, которые в определенных ситуациях очень эффективны.
MV здесь, для того, чтобы Query Rewrite сработал. От простого View здесь как раз никакого толку, и что там было понятно уважаемому специалисту по одной единственной СУБД - уже непонятно мне. Я вот просто View ну вообще никак к этой задаче не могу приткнуть.
16 июл 10, 12:37    [9115313]     Ответить | Цитировать Сообщить модератору
 Re: Какая DBMS поддерживает создание индексов на часть данных?  [new]
Dimitry Sibiryakov
Member

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

Apex

Я вот просто View ну вообще никак к этой задаче не могу приткнуть.

View с union all двух таблиц внутри. На одной нужный индекс есть, на
другой нет. Какой смысл в его материализации?

Posted via ActualForum NNTP Server 1.4

16 июл 10, 12:59    [9115522]     Ответить | Цитировать Сообщить модератору
 Re: Какая DBMS поддерживает создание индексов на часть данных?  [new]
Senya_L
Member

Откуда: Москва
Сообщений: 5381
Apex
И то, что вы сейчас написали про индексы - не совсем верно, т.к. в определенных ситуациях в Оракле специально...
Сдается мне, что равенство
Оракл == СУБД
ни фига не является коммутативным ;)))

Лично я использовал материализованные вьюхи для двух целей: 1) как средство ускорения запросов в отчетной БД; 2) для ускорения поиска по булеву полю (или другого типа с заведомо низкой селективностью). Что использовал - про то и говорю.
16 июл 10, 13:47    [9115968]     Ответить | Цитировать Сообщить модератору
 Re: Какая DBMS поддерживает создание индексов на часть данных?  [new]
Apex
Member

Откуда: Made in USSR
Сообщений: 3910
Dimitry Sibiryakov

Apex

Я вот просто View ну вообще никак к этой задаче не могу приткнуть.

View с union all двух таблиц внутри. На одной нужный индекс есть, на
другой нет. Какой смысл в его материализации?

Угу, а еще лучше сразу все приложение переписать, чтобы не было таких дурацких задач.
16 июл 10, 14:10    [9116185]     Ответить | Цитировать Сообщить модератору
 Re: Какая DBMS поддерживает создание индексов на часть данных?  [new]
Apex
Member

Откуда: Made in USSR
Сообщений: 3910
Senya_L
Apex
И то, что вы сейчас написали про индексы - не совсем верно, т.к. в определенных ситуациях в Оракле специально...
Сдается мне, что равенство
Оракл == СУБД
ни фига не является коммутативным ;)))

Сдается мне, что вы тут все слепые или читать не умеете...

Apex
Le Peace
mikron

Покажи пожалуста, как это делается с FBI.

case when field0 = 0 then field1 else null end

И толку от этого для вышеприведенных запросов - ноль.
Аналогом такого для данной задачи в Оракле будет только MV.

Отсюда и пошел весь дальнейший разговор про мат.вью.
16 июл 10, 14:13    [9116211]     Ответить | Цитировать Сообщить модератору
 Re: Какая DBMS поддерживает создание индексов на часть данных?  [new]
Ggg_old
Member

Откуда: Одесса
Сообщений: 1342
На SA10 нашел, что есть поддержка function based индекса. Который по сути делает вычисляемую колонку в таблице и строит по ней индекс. Т.е. вы получаете возможность сделать такой себе бинарный индекс.
CREATE [ VIRTUAL ] [ UNIQUE ] [ CLUSTERED ] INDEX index-name
ON [ owner.]table-name
( column-name [ ASC | DESC ], ...
| [b]function-name ( argument, ... ] ) AS column-name )[/b]
[ { IN | ON } dbspace-name ]
[ FOR OLAP WORKLOAD ]


function-name clause The function-name clause creates an index on a function. This clause cannot be used on declared temporary tables or materialized views.

This form of the CREATE INDEX statement is a convenience method that carries out the following operations:

-Adds a computed column named column-name to the table. The column is defined with a COMPUTE clause that is the specified function, along with any specified arguments. See the COMPUTE clause of the CREATE TABLE statement for restrictions on the type of function that can be specified. The data type of the column is based on the result type of the function.
-Populates the computed column for the existing rows in the table.
-Creates an index on the column.
16 июл 10, 15:03    [9116610]     Ответить | Цитировать Сообщить модератору
 Re: Какая DBMS поддерживает создание индексов на часть данных?  [new]
mikron
Member

Откуда:
Сообщений: 888
Ggg_old
На SA10 нашел, что есть поддержка function based индекса. Который по сути делает вычисляемую колонку в таблице и строит по ней индекс. Т.е. вы получаете возможность сделать такой себе бинарный индекс.

Весело с вам:)
Это вообще не решение. т.е. конечно, фукциналынй индекс получили,
а первоначалную задачу забыли.

1. Доп.колонка для вычисленных значений требует место в таблице
2. вычисляется для всех знбачений
3. ничем не лутше композитного индекса по (фиелд0, фиелд1)
16 июл 10, 15:16    [9116760]     Ответить | Цитировать Сообщить модератору
 Re: Какая DBMS поддерживает создание индексов на часть данных?  [new]
Ggg_old
Member

Откуда: Одесса
Сообщений: 1342
мне кажется, что вы не туда копаете. Если вам нужен очень быстрый поиск по ключевому полю, то это обычно достигается партицированием таблицы по этому полю. А что вы хотите добиться от недоиндекса я не понимаю. Индексный поиск сам по себе значительно ускоряет поиск, для чего и предназначен.
Функциональный индекс позволит вам бинаризировать все разнообразие входных ключевых величин до двух значений (нужное поле/ненужное поле). Либо еще, (как советовали) стройте вьюху, которая будет содержать только те значения, которые необходимы.
В постановке вашей задачи не было ничего про "дополнительное пространство", да и на сегодняшний день дополнительное пространство никого не интересует, 90е годы остались далеко позади. Сам индекс, кстати тоже занимает место.
16 июл 10, 16:23    [9117423]     Ответить | Цитировать Сообщить модератору
 Re: Какая DBMS поддерживает создание индексов на часть данных?  [new]
mikron
Member

Откуда:
Сообщений: 888
Ggg_old
мне кажется, что вы не туда копаете. Если вам нужен очень быстрый поиск по ключевому полю, то это обычно достигается партицированием таблицы по этому полю. А что вы хотите добиться от недоиндекса я не понимаю. Индексный поиск сам по себе значительно ускоряет поиск, для чего и предназначен.
Функциональный индекс позволит вам бинаризировать все разнообразие входных ключевых величин до двух значений (нужное поле/ненужное поле). Либо еще, (как советовали) стройте вьюху, которая будет содержать только те значения, которые необходимы.
В постановке вашей задачи не было ничего про "дополнительное пространство", да и на сегодняшний день дополнительное пространство никого не интересует, 90е годы остались далеко позади. Сам индекс, кстати тоже занимает место.

А мне кажется у вас есть большой потенциал для углубления ваших познаний.
Я не согласен, или согласен только с оговорками, с каждым вашим утверждением.
No comments.
Вобще меня интересовало какая DBMS может такие фокусы.
Названы были: PostgreSQL, MS SQL 2008, Terradata и прочие, для меня не интересные.
Как я писал в самом начале, решение с мат. представлением
для Оракл можно условно отнести к разряду допустимых. Тема исчерпана.
За сим откланиваюсь и благодарю ответивших.
16 июл 10, 16:55    [9117678]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Сравнение СУБД Ответить