Индексирование
Индексирование
Упорядоченные наборы являются дорогостоящими для ресурсов сервера и вообще для производительности. При оценке запроса и определении плана оптимизатор может выбирать между тремя методами доступа к наборам данных (называемым потоками), которые располагаются в указанных таблицах: NATURAL (поиск без какого-либо порядка), INDEX (использование индекса для управления поиском) и MERGE (создание двоичных образов двух потоков и их слияние по принципу один к одному).
Когда набор читается в порядке индекса, порядок чтения является неестественным (т. е. не в порядке хранения). Вероятность того, что индексное чтение будет вовлекать в обработку множество страниц, очень высока, а стоимость растет с ростом размера таблицы. В худшем случае количество операций ввода/вывода будет увеличиваться.
При методе MERGE (также называемый SORT) каждая строка (а следовательно, и каждая страница) читается только один раз, а чтение выполняется в порядке хранения. В Firebird 1.5, который с большой вероятностью будет использовать оперативную память для сортировки, метод MERGE является наиболее быстрым в большинстве случаев.
Следует еще раз подчеркнуть важность хорошего индексирования для ускорения и улучшения процесса сортировки в упорядоченных запросах. В упорядоченных наборах при правильных условиях метод INDEX С хорошим индексом быстро выдаст первые строки. При этом индекс также может значительно замедлить выборку. Затраты могут быть такими, что весь набор будет выбран гораздо медленнее, чем при использовании альтернативного метода доступа MERGE. В методе MERGE первая строка отыскивается медленнее, но весь набор выбирается быстрее.
То же самое соотношение необязательно должно применяться к группируемым запросам, поскольку они требуют полной выборки набора на сервере, прежде чем строка может быть выведена. В условиях группирования может случиться так, что индекс ухудшит, а не улучшит производительность.