Значение стоимости виртуальной таблицы SQLite?

Функция xBestIndex для виртуальной таблицы, помимо прочего, возвращает оценочную стоимость. Ориентировочная стоимость описана

В поле timateCost должно быть указано приблизительное число операций доступа к диску, необходимых для выполнения этого запроса к виртуальной таблице. Ядро SQLite часто вызывает xBestIndex несколько раз с различными ограничениями, получает несколько оценок стоимости, а затем выбирает план запроса, который дает самую низкую оценку. Ядро SQLite инициализирует оценочное значение COST до очень большого значения перед вызовом xBestIndex, поэтому, если xBestIndex определяет, что текущая комбинация параметров нежелательна, оно может оставить поле timateCost без изменений, чтобы не использовать его.

Это довольно неоднозначно. Прежде всего, является ли эта стоимость относительной (она только когда-либо сравнивается со значениями стоимости из той же таблицы) или абсолютной (стоимость может сравниваться со значениями стоимости для других таблиц, не предоставленных модулем виртуальной таблицы, если один оператор обращается к обеим таблицам)?

Если это сравнить со значениями затрат для запросов в других таблицах:

  • Следует ли учитывать кэширование? Например, если таблица может целиком поместиться в кеш (независимо от того, какой кеш релевантен), следует ли амортизировать число обращений к диску по размеру блоков, которые потребуют чтения с диска, т. Е. Делить на количество строк в блоке?
  • Как использовать это значение для таблиц на основе памяти? Например, очевидно, что намного быстрее выполнить бинарный поиск по индексу для одного столбца, чем линейно сканировать таблицу на наличие неиндексированного столбца (по крайней мере, для среднего n большого размера), но ни один из них не приведет к доступу к диску.

0 ответов

Другие вопросы по тегам