Що таке "сканування бітної карти" в плані запитів?


113

Я хочу знати принцип "Сканування бітної карти", я знаю, що це часто трапляється, коли я виконую запит із ORумовою.

Хто може пояснити принцип, що стоїть за "скануванням бітової карти"?

Відповіді:


122

Найкраще пояснення виходить від Тома Лейн , який є автором алгоритму, якщо я не помиляюся. Дивіться також статтю у Вікіпедії .

Словом, це трохи схоже на сканування послідовності. Різниця полягає в тому, що замість того, щоб відвідувати кожну сторінку диска, сканування індексу растрових зображень AND та OR, застосовні індекси разом, і відвідує лише ті сторінки диска, які їй потрібні.

Це відрізняється від сканування індексів, де індекс відвідується рядком за рядком, тобто сторінка диска може відвідуватися кілька разів.


Re: питання у вашому коментарі ... Так, саме так.

Сканування покажчиків проходитиме через рядки по черзі, відкриваючи сторінки диска знову і знову стільки разів, скільки потрібно (деякі, звичайно, залишаться в пам’яті, але ви отримаєте крапку).

Сканування індексу растрових зображень послідовно відкриє короткий список сторінок дисків і захоплює кожну застосовану рядок у кожній (звідси так звана умова повторної перевірки, яку ви бачите в планах запитів).

Зауважте, як осторонь, як кластеризація / порядок рядків впливає на пов’язані витрати з будь-яким методом. Якщо рядки в усьому місці в довільному порядку, індекс растрової карти буде дешевшим. (І насправді, якщо вони дійсно є в усьому світі , послідовне сканування буде найдешевшим, оскільки сканування індексу растрових зображень не обходиться без накладних витрат.)


Отже, "Сканування біт-карти": Сторінку можна відвідувати не один раз! але "Можна індексувати": сторінку можна відвідувати не один раз, тому що індекс відвідується рядок за рядком.
франки

Ймовірно, кеш залучається, коли сторінки відвідуються кілька разів: сторінка фактично буде завантажена з диска вперше (повільно), і подальший доступ потрапить у кеш пам'яті (Postgres кеш (швидкий) або кеш ОС (швидше)) .
Матьє

Також є index-only scanзапит, коли в запит звертається лише індексований стовпець. у цьому випадку index-only scanне потрібно отримувати доступ до даних купи (сторінки даних): postgresql.org/docs/12/indexes-index-only-scans.html
Алан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.