Затраты на операции ввода/вывода между индексным сканированием и сканированием таблиц в основном различаются с точки зрения того, как доступ к данным, количество чтения страниц и эффективность, основанную на селективности запросов и организации данных.
Индексные сканирования включают доступ к данным путем переселения индексной структуры (часто B-три). Стоимость здесь в основном включает в себя два компонента: стоимость доступа к страницам индексов и стоимость получения соответствующих страниц таблицы. Страницы индекса обычно имеют паттерны случайного доступа, потому что индексные узлы листьев могут быть физически смежными на диске, что приводит к случайным операциям ввода -вывода. Каждый логический шаг вниз по дереву индекса от корня к листу требует страниц чтения, и эта стоимость оценивается с использованием параметра затрат на случайную страницу системы. После поиска записей индекса для соответствующих строк система получает соответствующие страницы данных таблицы. Количество таких извлечений страниц данных зависит от селективности запроса и физической корреляции между хранимыми данными и порядок индекса (известный как корреляция). Высокая корреляция означает, что указатели индекса в записи строк тесно соответствуют порядку физических данных, снижая случайный ввод -вывод и повышающий сканирование индекса более эффективным. С другой стороны, низкая корреляция приводит ко многим случайным извлечениям, что существенно увеличивает стоимость ввода/вывода.
Стоимость процессора в индексе сканировала обработку каждой отдельной строки, но основной проблемой стоимости является ввод -вывод. Существует также аспект видимости: если база данных имеет отслеживание карты видимости, какие страницы данных полностью видны для всех транзакций, система может иногда полностью пропустить чтение определенных страниц во время сканирования только индекс, что резко снижает затраты ввода-вывода.
Напротив, сканирование таблицы или полного табличного сканирования работают путем считывания всех страниц данных последовательно из таблицы. Ввод/вывод здесь в основном последовательный, который имеет тенденцию быть быстрее, чем случайный ввод -вывод на вращающихся дисках или менее наказывается на SSD. Стоимость полного сканирования таблицы относительно постоянна, потому что она читает всю таблицу независимо от количества строк, которые удовлетворяют запросу. Эта стоимость зависит от общего количества страниц в таблице, а не от количества выбранных строк. Полное сканирование таблицы не выигрывает от селективности; Они должны читать каждую страницу, даже если запрос сильно фильтрует ряды. Тем не менее, с современными технологиями и оптимизацией хранения, такими как многополосные чтения, параллельные чтения и разгрузка уровня хранения, стоимость полного сканирования таблицы может быть конкурентоспособным или даже меньше, чем индексные сканирования для запросов, которые получают значительную часть таблицы.
Оптимизатор на основе затрат (CBO) решает между использованием индексного сканирования и полным сканированием таблицы на основе оценочных затрат. Для высокоселективных запросов, где необходимо извлечь только небольшую часть рядов, имеют более низкие затраты ввода/вывода, поскольку извлекают меньше страниц таблицы. Когда порог селективности увеличивается (больше строк необходимо), стоимость ввода/вывода на сканирование индекса возрастает из -за более высокого количества случайных избранных страниц и обходов индекса, в конечном итоге превысив стоимость полного сканирования таблицы. На этом этапе CBO поддерживает сканирование таблицы, потому что последовательная стоимость ввода/вывода меньше, чем случайное бремя ввода/вывода многих поисков индекса.
Другим важным фактором, влияющим на разницу в стоимости ввода/вывода, является «коэффициент кластеризации» или физическую кластеризацию строк, соответствующих ключам индекса. Более низкий коэффициент кластеризации (лучшая кластеризация) означает, что строки, доступные через индекс, расположены рядом друг с другом физически, снижая случайный ввод -вывод и повышая эффективность сканирования индекса. Более высокий коэффициент кластеризации приводит к более случайному вводному/выводу во время сканирования индекса и снижает его преимущество по сравнению с таблицей.
Современные системы баз данных могут также реализовать параллельные сканы как индекс, так и полное сканирование таблиц, где ресурсы ввода -вывода и процессора используются среди нескольких работников, что может сократить общее время запроса. Тем не менее, фундаментальный характер ввода/вывода для индексных сканирования (случайный доступ к странице) по сравнению с табличными сканированием (в основном последовательный доступ к странице) остается ключевым отличием.
Подводя итог ключевых моментов о различиях в стоимости ввода/вывода:
- Индексные сканирования несут затраты на ввод ввода/вывода от страниц индекса считывания (случайный доступ) плюс извлечение соответствующих страниц данных (потенциально случайный доступ). Стоимость чувствительна к селективности, корреляции и коэффициенту кластеризации.
- Полное сканирование таблицы выполняет последовательный ввод -вывод, чтение всех страниц с относительно стабильной стоимостью ввода/вывода независимо от селективности.
- Индексные сканирования могут превзойти, когда запросы нацелены на небольшие подмножества данных, но страдают от случайных накладных расходов ввода -вывода по мере повышения селективности.
- Полное сканирование таблицы может быть более эффективным, когда большая часть таблицы нуждается в доступе из -за эффективного последовательного ввода -вывода.
- Карты видимости и сканирование только для индекса могут снизить затраты ввода/вывода в некоторых случаях сканирования индекса, избегая чтения страниц данных.
- Параллелизм может улучшить оба типа сканирования, но не изменяет фундаментальные характеристики ввода/вывода.
- Оптимизатор уравновешивает эти коэффициенты стоимости, чтобы выбрать наиболее эффективный метод на основе запросов и характеристик данных.