Что такое «сканирование кучи растровых изображений» в плане запроса? - PullRequest
92 голосов
/ 06 июля 2011

Я хочу знать принцип «сканирования кучи растровых изображений», я знаю, что это часто случается, когда я выполняю запрос с OR в условии.

Кто может объяснить принцип, лежащий в основе «кучи растровых изображений»сканирование "?

1 Ответ

107 голосов
/ 06 июля 2011

Лучшее объяснение приходит от Тома Лейна , который является автором алгоритма, если я не ошибаюсь. Смотрите также статья в Википедии .

Короче говоря, это немного похоже на последовательное сканирование. Разница заключается в том, что вместо просмотра каждой страницы на диске растровые индексы сканируют AND и OR, применяя соответствующие индексы, и посещают только те страницы диска, которые ему необходимы.

Это отличается от сканирования индекса, когда индекс посещается строка за строкой по порядку - это означает, что страница диска может посещаться несколько раз.


Re: вопрос в вашем комментарии ... Да, именно так.

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

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

Обратите внимание на то, как кластеризация / порядок строк влияет на связанные затраты с любым методом. Если строки расположены повсюду в случайном порядке, индекс растрового изображения будет дешевле. (И, на самом деле, если они действительно все повсеместно, последующее сканирование будет самым дешевым, поскольку сканирование растровых индексов не обходится без некоторых накладных расходов.)

...