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

Откуда: 127.0.0.1
Сообщений: 67463
Блог
MasterZiv
Как IOT расшифровывается?

В Вашей терминологии это таблица с единственным кластерным индексом.
20 авг 11, 01:17    [11149935]     Ответить | Цитировать Сообщить модератору
 Re: Как происходит операция Index Seek на самом нижнем уровне?  [new]
Index Seek
Guest
MasterZiv
On 08/19/2011 09:08 PM, tanglir wrote:

> Если убрать слово "кластерный", то это Мускль+ИнноДБ.

Зачем убирать ? В InnoDB вообще-то других индексов, кроме кластерных,
вообще не существует. Там всё в одном здоровом индексном дереве.

Это как в InnoDB, делаем на таблицу три индекса и получаем три копии таблицы отсортированные в порядке своих индексов?

Кластерный индекс это когда строится дерево по индексу, а в его листьях расположены остальные столбцы, как например PK в MS SQL. Тут ещё важно что они в базе лежат в порядке индекса для последовательного чтения с диска.
Но кластерный может быть только один индекс на таблицу, остальные обычные с указателями RID в листьях.
20 авг 11, 01:59    [11150073]     Ответить | Цитировать Сообщить модератору
 Re: Как происходит операция Index Seek на самом нижнем уровне?  [new]
Index Seek
Guest
softwarer
Ну, "уникальный кластерный индекс" - вещь сама по себе весьма небесспорная, но просто интересно - где на практике применяется описанный угробищный подход?

А в чем угробищность подхода например?
20 авг 11, 02:01    [11150082]     Ответить | Цитировать Сообщить модератору
 Re: Как происходит операция Index Seek на самом нижнем уровне?  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
Index Seek
Кластерный индекс это когда строится дерево по индексу, а в его листьях расположены остальные столбцы, как например PK в MS SQL.
PK то здесь причем?..
20 авг 11, 20:18    [11151578]     Ответить | Цитировать Сообщить модератору
 Re: Как происходит операция Index Seek на самом нижнем уровне?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 32174
softwarer
MasterZiv
  • хранить в листах индекса значения полей уникального кластерного индекса -- первичного ключа таблицы. В таком случае после поиска индексной записи значения PK используются для повторного поиска нужной индексной записи в первичном ключе

  • Ну, "уникальный кластерный индекс" - вещь сама по себе весьма небесспорная, но просто интересно - где на практике применяется описанный угробищный подход?
    Нормальный метод, используется в сиквеле.

    Если он по каким-то причинам не подходит, можно не использовать.

    Но чаще всего это очень эффективно. Потому как не нужно перестраивать индексы при расщеплении страниц, не нужно удваивать размер индекса и делать по 2 чтения, как в оракле, и к тому же часто бывает, что обращение к страницам вообще не нужно, достаточно обращения к индексу.
    Dimitry Sibiryakov
    alexeyvg
    В MSSQL rowid и означает номер страницы.

    О как... Одна запись на страницу? Шикарно живёте...
    Нет, конечно, не одна. Это вообще был ответ на вопрос Index Seek.

    Имеется в виду, что в rowid уже есть вся необходимая информация, и искать ничего не надо.
    20 авг 11, 22:24    [11151802]     Ответить | Цитировать Сообщить модератору
     Re: Как происходит операция Index Seek на самом нижнем уровне?  [new]
    alexeyvg
    Member

    Откуда: Moscow
    Сообщений: 32174
    SergSuper
    Index Seek
    Кластерный индекс это когда строится дерево по индексу, а в его листьях расположены остальные столбцы, как например PK в MS SQL.
    PK то здесь причем?..
    Новички часто путают ПК и кластерный индекс (про разницу кластерного индекса и уникального кластерного индекса я вообще молчу - это для лысых профессоров :-) )
    20 авг 11, 22:26    [11151807]     Ответить | Цитировать Сообщить модератору
     Re: Как происходит операция Index Seek на самом нижнем уровне?  [new]
    Dimitry Sibiryakov
    Member

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

    alexeyvg
    Потому как не нужно перестраивать индексы при расщеплении страниц

    Это при расщеплении каких страниц перестраиваются индексы?...

    Posted via ActualForum NNTP Server 1.4

    20 авг 11, 23:23    [11151965]     Ответить | Цитировать Сообщить модератору
     Re: Как происходит операция Index Seek на самом нижнем уровне?  [new]
    Index Seek
    Guest
    SergSuper
    Index Seek
    Кластерный индекс это когда строится дерево по индексу, а в его листьях расположены остальные столбцы, как например PK в MS SQL.
    PK то здесь причем?..

    Это "как например".
    PK в MS SQL - всегда есть кластерный индекс.

    alexeyvg
    SergSuper
    пропущено...
    PK то здесь причем?..
    Новички часто путают ПК и кластерный индекс (про разницу кластерного индекса и уникального кластерного индекса я вообще молчу - это для лысых профессоров :-) )

    Надеюсь я ничего не напутал?

    alexeyvg
    Но чаще всего это очень эффективно. Потому как не нужно перестраивать индексы при расщеплении страниц, не нужно удваивать размер индекса и делать по 2 чтения, как в оракле, и к тому же часто бывает, что обращение к страницам вообще не нужно, достаточно обращения к индексу.

    А где там в Оракле удваивается размер индекса?

    Кстати в Оракле можно делать кластерные IOT, по аналогии с кластерными таблицами (не путать с кластерным индексом)?
    21 авг 11, 00:24    [11152108]     Ответить | Цитировать Сообщить модератору
     Re: Как происходит операция Index Seek на самом нижнем уровне?  [new]
    softwarer
    Member

    Откуда: 127.0.0.1
    Сообщений: 67463
    Блог
    Index Seek
    А в чем угробищность подхода например?

    В том, что для индекса, например, глубины 5, нужно аж 10 чтений, чтобы добраться до искомых данных.

    Index Seek
    А где там в Оракле удваивается размер индекса?

    Да Вы не беспокойтесь, коллега так спешит писать, что не успевает читать. Где уж тут думать...
    21 авг 11, 00:33    [11152129]     Ответить | Цитировать Сообщить модератору
     Re: Как происходит операция Index Seek на самом нижнем уровне?  [new]
    SergSuper
    Member

    Откуда: SPb
    Сообщений: 5488
    Index Seek
    SergSuper
    пропущено...
    PK то здесь причем?..

    Это "как например".
    PK в MS SQL - всегда есть кластерный индекс.

    вобще-то не обязательно
    Но PK - это логическое понятие, а тут разговор о физическом хранении

    Сообщение было отредактировано: 21 авг 11, 01:15
    21 авг 11, 01:13    [11152211]     Ответить | Цитировать Сообщить модератору
     Re: Как происходит операция Index Seek на самом нижнем уровне?  [new]
    Index Seek
    Guest
    softwarer
    Index Seek
    А в чем угробищность подхода например?

    В том, что для индекса, например, глубины 5, нужно аж 10 чтений, чтобы добраться до искомых данных.

    А можно чуть подробней? Или вы имеете ввиду при доступе к данным IOT/(таблицы с кластерным индексом) не по кластерному индексу, а по обычному? Я думаю там в листьях тоже есть информация о номере страницы с данными, навряд ли стали бы они так криво делать.

    А если имеете ввиду именно кластерный индекс, то в обычном индексе в листьях находится RID по которому нужно ещё прочитать данные из таблицы, а в кластерном/IOT в листьях сами данные.
    Мало того при IOS мы последовательно читаем, а не рандомно.

    Например IOS нету в PostgreSQL и Firebird, там SELECT name FROM table ORDER BY id выгоднее делать сортировку чем использовать индекс по ID, как раз по описанной выше причине. По крайне мере в Firebird по этому поводу целая статья была.

    SergSuper
    Index Seek
    пропущено...

    Это "как например".
    PK в MS SQL - всегда есть кластерный индекс.

    вобще-то не обязательно
    Но PK - это логическое понятие, а тут разговор о физическом хранении

    А можно пример как создать PK в MS SQL чтобы он не был кластерным индексом?
    21 авг 11, 01:35    [11152282]     Ответить | Цитировать Сообщить модератору
     Re: Как происходит операция Index Seek на самом нижнем уровне?  [new]
    softwarer
    Member

    Откуда: 127.0.0.1
    Сообщений: 67463
    Блог
    Index Seek
    Или вы имеете ввиду ... Я думаю

    Я имею в виду реализацию, описанную Master Ziv-ом на прошлой странице.

    Index Seek
    там SELECT name FROM table ORDER BY id выгоднее делать сортировку чем использовать индекс по ID

    Запросы с order by id - вещь редкая, не то чтобы нужная, но из общих соображений я бы отметил, что в них сортировка будет выгоднее индекса всегда, когда нет гарантии в том, что записи вставлялись строго по возрастанию.
    21 авг 11, 01:52    [11152326]     Ответить | Цитировать Сообщить модератору
     Re: Как происходит операция Index Seek на самом нижнем уровне?  [new]
    Index Seek
    Guest
    softwarer
    Index Seek
    Или вы имеете ввиду ... Я думаю

    Я имею в виду реализацию, описанную Master Ziv-ом на прошлой странице.

    Index Seek
    там SELECT name FROM table ORDER BY id выгоднее делать сортировку чем использовать индекс по ID

    Запросы с order by id - вещь редкая, не то чтобы нужная, но из общих соображений я бы отметил, что в них сортировка будет выгоднее индекса всегда, когда нет гарантии в том, что записи вставлялись строго по возрастанию.

    А ну что Master Ziv сказал я вообще не понял, надеюсь разъяснит.

    "Запросы с order by id" это как пример. В реальности это круто скажется при SMJ, с допустим подсчетом агрегатов. В Firebird он начнет дергать таблицу в независимости от того что индекс покрывающий.
    IOS по IOT позволит избежать random read, в отличие от index key lookup.
    А IOT по сравнению с обычным покрывающим индексом позволит исключить затраты на сортировку по ненужным столбцам, допустим по которым идет подсчет агрегатов.
    Собственно для этого например в MS SQL есть включенные столбцы и кластерный индекс, а в Oracle - IOT.
    21 авг 11, 02:09    [11152375]     Ответить | Цитировать Сообщить модератору
     Re: Как происходит операция Index Seek на самом нижнем уровне?  [new]
    softwarer
    Member

    Откуда: 127.0.0.1
    Сообщений: 67463
    Блог
    Index Seek
    В реальности это круто скажется при SMJ, с допустим подсчетом агрегатов.

    Не возьмусь отгадывать, что такое SMJ.

    Index Seek
    В Firebird он начнет дергать таблицу в независимости от того что индекс покрывающий.

    Мне так смутно помнится, что в IB/FB у индексов хитрая версионность, которая идеологически мешает в некоторых случаях их использовать.

    Index Seek
    IOS по IOT позволит избежать random read, в отличие от index key lookup.

    Если IOS - это что-нибудь типа Index Order Scan, то фокус как раз в том, что оно далеко не всегда лучшее решение.

    Когда расщепляется страница в середине индекса, у сервера есть фактически два варианта: либо передвигать пол-индекса, либо записать новую страницу куда-нибудь в конец, то есть нарушить порядок следования страниц в индексе. Когда после этого производится массовое чтение по [покрывающему] индексу, то "считать индекс от начала до конца и отсортировать" скорее всего будет быстрее, нежели постранично считывать его в нужном порядке.
    21 авг 11, 02:21    [11152406]     Ответить | Цитировать Сообщить модератору
     Re: Как происходит операция Index Seek на самом нижнем уровне?  [new]
    egorych
    Member

    Откуда: и зачем;
    Сообщений: 4809
    Index Seek
    А можно пример как создать PK в MS SQL чтобы он не был кластерным индексом?
    нет ничего проще:
    CREATE TABLE table
    (
    	id INT NOT NULL IDENTITY( 1, 1 )
    		CONSTRAINT PK_delivery_hdr PRIMARY KEY NONCLUSTERED ( id ) ON [PRIMARY],
    	...
    ) ON [PRIMARY]
    GO
    
    21 авг 11, 02:48    [11152453]     Ответить | Цитировать Сообщить модератору
     Re: Как происходит операция Index Seek на самом нижнем уровне?  [new]
    Index Seek
    Guest
    softwarer
    Index Seek
    IOS по IOT позволит избежать random read, в отличие от index key lookup.

    Если IOS - это что-нибудь типа Index Order Scan, то фокус как раз в том, что оно далеко не всегда лучшее решение.

    Когда расщепляется страница в середине индекса, у сервера есть фактически два варианта: либо передвигать пол-индекса, либо записать новую страницу куда-нибудь в конец, то есть нарушить порядок следования страниц в индексе. Когда после этого производится массовое чтение по [покрывающему] индексу, то "считать индекс от начала до конца и отсортировать" скорее всего будет быстрее, нежели постранично считывать его в нужном порядке.

    SMJ - Sort Merge Join.

    Бывает что и Fast Full Index Scan с сортировкой быстрее чем Full Index Scan по сильно фрагментированному индексу. Если это OLTP, то там и данных и запросов таких мало. Если DWH, то индексы обычно в хорошем состоянии.
    Но в приведенном мною примере если и случиться FFIS, то не с сортировкой, а с HASH JOIN и HASH MATCH. А вот если зададим в предикатах WHERE диапазоны то приехали, сортировка. Ну а сортировка по фактам DWH вообще унылое зрелище, если только не секционирована по этому полю.
    Собственно с диапазонами в предикатах WHERE в Exadata идет FFIS со спасительным Smart Scan. А дальше HJ/HM.

    Не знаю насколько в Firebird отсутствие IOS связано с версионностью :)
    Но там соответственно не возможно и Fast Full Index Scan.
    И нету спасительных в этом случае HASH JOIN с HASH MATCH.
    Ну представьте таблицу в 10 ТБ, либо всю сортировать во внешней памяти, либо всю в random read дергать :) Это сутки.
    21 авг 11, 03:01    [11152470]     Ответить | Цитировать Сообщить модератору
     Re: Как происходит операция Index Seek на самом нижнем уровне?  [new]
    Index Seek
    Guest
    egorych, круто :)
    21 авг 11, 03:05    [11152477]     Ответить | Цитировать Сообщить модератору
     Re: Как происходит операция Index Seek на самом нижнем уровне?  [new]
    Dimitry Sibiryakov
    Member

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

    Index Seek
    Ну представьте таблицу в 10 ТБ, либо всю сортировать во внешней памяти, либо всю в random
    read дергать :) Это сутки.

    Боюсь, что разработчика, написавшего такой запрос, убьют независимо от используемой СУБД...

    Posted via ActualForum NNTP Server 1.4

    21 авг 11, 13:37    [11152961]     Ответить | Цитировать Сообщить модератору
     Re: Как происходит операция Index Seek на самом нижнем уровне?  [new]
    Index Seek
    Guest
    Dimitry Sibiryakov
    Index Seek
    Ну представьте таблицу в 10 ТБ, либо всю сортировать во внешней памяти, либо всю в random
    read дергать :) Это сутки.

    Боюсь, что разработчика, написавшего такой запрос, убьют независимо от используемой СУБД...

    Если вы про который я написал, то соединение со справочником и агрегированием по фактам входит почти в любой запрос к DWH и на нормальных СУБД он выполнится за несколько десятков минут. С матвью за минуту.
    Или вы про то что его можно выполнить в Firebird за то же время? Расскажите как.
    21 авг 11, 14:12    [11153038]     Ответить | Цитировать Сообщить модератору
     Re: Как происходит операция Index Seek на самом нижнем уровне?  [new]
    Dimitry Sibiryakov
    Member

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

    Index Seek
    соединение со справочником и агрегированием по фактам входит почти в любой запрос к DWH

    И почти любой запрос к DWH молотит террабайты данных? Я думал для этого давно придумали
    свёртку в OLAP кубы.

    И Firebird, вообще-то, не претендует на использование в DWH. У неё другая ниша.

    Posted via ActualForum NNTP Server 1.4

    21 авг 11, 14:28    [11153066]     Ответить | Цитировать Сообщить модератору
     Re: Как происходит операция Index Seek на самом нижнем уровне?  [new]
    Index Seek
    Guest
    Dimitry Sibiryakov
    Index Seek
    соединение со справочником и агрегированием по фактам входит почти в любой запрос к DWH

    И почти любой запрос к DWH молотит террабайты данных? Я думал для этого давно придумали
    свёртку в OLAP кубы.

    И Firebird, вообще-то, не претендует на использование в DWH. У неё другая ниша.

    А в результате какого запроса получается свёртка в OLAP кубы? :)
    21 авг 11, 14:42    [11153100]     Ответить | Цитировать Сообщить модератору
     Re: Как происходит операция Index Seek на самом нижнем уровне?  [new]
    Dimitry Sibiryakov
    Member

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

    Index Seek
    А в результате какого запроса получается свёртка в OLAP кубы? :)

    Разве они обновляются целиком, а не копятся инкрементально?..

    Posted via ActualForum NNTP Server 1.4

    21 авг 11, 15:56    [11153222]     Ответить | Цитировать Сообщить модератору
     Re: Как происходит операция Index Seek на самом нижнем уровне?  [new]
    MasterZiv
    Member

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

    On 20.08.2011 2:59, Index Seek wrote:

    > Это как в InnoDB, делаем на таблицу три индекса и получаем три копии таблицы
    > отсортированные в порядке своих индексов?

    Нет, конечно. Один кластерный индекс, и два индекса (можно сказать -- кластерные
    таблицы), содержащие в листах значения полей кластерного индекса.

    > Кластерный индекс это когда строится дерево по индексу, а в его листьях
    > расположены остальные столбцы, как например PK в MS SQL. Тут ещё важно что они в
    > базе лежат в порядке индекса для последовательного чтения с диска.
    > Но кластерный может быть только один индекс на таблицу, остальные обычные с
    > указателями RID в листьях.

    Спасибо за информацию.

    Posted via ActualForum NNTP Server 1.4

    23 авг 11, 12:05    [11162726]     Ответить | Цитировать Сообщить модератору
     Re: Как происходит операция Index Seek на самом нижнем уровне?  [new]
    Index Seek
    Guest
    MasterZiv
    On 20.08.2011 2:59, Index Seek wrote:

    > Это как в InnoDB, делаем на таблицу три индекса и получаем три копии таблицы
    > отсортированные в порядке своих индексов?

    Нет, конечно. Один кластерный индекс, и два индекса (можно сказать -- кластерные
    таблицы), содержащие в листах значения полей кластерного индекса.

    Два индекса содержащие в листьях значения индексных полей или включенных полей кластерного индекса?
    (Индексные - это которые отсортированы в кластерном, включенные - нет)

    " и два индекса (можно сказать -- кластерные таблицы)"
    Имеется ввиду кластерные таблицы в определениях Oracle?
    23 авг 11, 14:51    [11164544]     Ответить | Цитировать Сообщить модератору
     Re: Как происходит операция Index Seek на самом нижнем уровне?  [new]
    ScareCrow
    Member

    Откуда: Белый город
    Сообщений: 17472
    автор
    Имеется ввиду кластерные таблицы в определениях Oracle?

    да это везде так, потому что по другому не сделаешь. хотя коллега софтварер говорит что в Оракле еще и указатель на страницу хранится.
    p.s. чем больше узнаю про оракл тем больше удивляюсь - как он вообще умудряется работать?
    24 авг 11, 11:00    [11169461]     Ответить | Цитировать Сообщить модератору
    Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4   вперед  Ctrl      все
    Все форумы / Сравнение СУБД Ответить