Модераторы: Akella
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> distinct vs индексы, FB 1.5 
:(
    Опции темы
jsa
Дата 27.9.2006, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 704
Регистрация: 19.1.2006
Где: Новосибирск

Репутация: 1
Всего: 20



Hi All!

почему dictinct не использует индексы? Я понимаю, что использование дистинкта приводит к неявной сортировке, и тут бы как раз использовать индексы, но нифига, облом. Это такая особенность дистинкта? Или  я чего то не понимаю.


--------------------
Все мы, на перине с песней, строим небо на земле © Ю. Шевчук
PM MAIL ICQ   Вверх
Akella
Дата 28.9.2006, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



Наверное от запроса зависит. Если безо всяких условий, то может и не использует, ибо нафик не нужно

Добавлено @ 13:22 
код без условий
Код
 select distinct(apart.INPUT_DATE) from apart

План
Цитата
PLAN SORT ((APART NATURAL))


вот код с условиями
Код
select distinct(apart.INPUT_DATE) from apart  where apart.INPUT_DATE > '01.07.2006 17:30:01'

План
Цитата
PLAN SORT ((APART INDEX (APART_IDX_INPUTDATE)))


суди сам
PM MAIL   Вверх
adima
Дата 28.9.2006, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 19.9.2006

Репутация: нет
Всего: нет



Автора интересовал видимо именно код без условий
На ibase.ru есть статья Д. Еманова о способах доступа к данным в Firebird
http://ibase.ru/devinfo/dataaccesspaths.htm
Цитата

2.2. Сортировка
Также известна как внешняя сортировка (external sort). Данный фильтр применяется оптимизатором при необходимости упорядочить входной поток в случае невозможности применения индексной навигации (см. пункт 1.2.3). Примеры его использования: сортировка или группировка (в случае, когда нет подходящих индексов или индексы неприменимы для входного потока), построение B+ дерева индекса, выполнение операции DISTINCT, подготовка данных для однопроходного слияния (см. ниже) и другие.

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

Алгоритм сортировки представляет собой многоуровневую быструю сортировку (quick sort). Набор входных записей помещается во внутренний буфер, после чего он сортируется и блок перемещается во внешнюю память. Далее таким же образом заполняется следующий блок и процесс продолжается до окончания записей во входном потоке. После чего заполненные блоки вычитываются и по ним строится бинарное дерево слияния. При чтении из фильтра сортировки происходит разбор дерева и слияние записей в один проход. Внешней памятью может выступать как виртуальная память, так и дисковое пространство, в зависимости от настроек файла конфигурации сервера.

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

У сортировки существует два режима работы: "нормальный" и "усекающий". Первый из них сохраняет записи с дублирующимися ключами сортировки, в то время как второй приводит к тому, что дубликаты удаляются. Именно "усекающий"режим реализует операцию DISTINCT, например. 



PM MAIL   Вверх
jsa
Дата 29.9.2006, 04:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 704
Регистрация: 19.1.2006
Где: Новосибирск

Репутация: 1
Всего: 20



Цитата

Автора интересовал видимо именно код без условий

да, именно так

adima, сенькс, теперь более менее понятно


--------------------
Все мы, на перине с песней, строим небо на земле © Ю. Шевчук
PM MAIL ICQ   Вверх
Akella
Дата 18.10.2006, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



Цитата

7. я вижу в информации о плане запроса слово NATURAL! О ужас!

Ничего страшного. Таблица, для которой оптимизатор выбрал перебор записей в естественном порядке (natural), может быть небольшой, что вполне оправдано. Или, путем использования natural будет меньше обращений к страницам БД, чем при использовании индекса.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Interbase"
Alex

Обязательно указание:

1. Версию InterBase (Firebird, Yaffil)

2. Способа доступа (ADO, BDE, IBX и т.д.)

  • КАК ПРАВИЛЬНО ОФОРМИТЬ КОД - ЗДЕСЬ
  • КАК ПРАВИЛЬНО УКАЗАТЬ ТЕКСТ ОШИБКИ - ЗДЕСЬ
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • FAQ раздела лежит здесь!

Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Firebird, Interbase | Следующая тема »


 




[ Время генерации скрипта: 0.0497 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.