Запросы, планы, оптимизация запросов, ...
Модераторы: kdv, CyberMax
-
kda
- Сообщения: 4
- Зарегистрирован: 24 фев 2011, 17:50
Сообщение
kda » 27 июн 2012, 22:37
Имеется таблица с индексом по полю A.
При выполнении запроса
индекс этого поля используется.
Почему при добавлении в order by поля без индекса, например B
индекс по полю A перестает использоваться, возникает NATURAL?
Используется FB 2.5.1 SS
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 28 июн 2012, 02:56
потому что для order by может быть использован только индекс, построенный по всем столбцам order by, и именно в том порядке, как они там указаны.
т.е. для order by a, b должен существовать индекс по a+b, а не отдельно по a, b, или по b+a.
почитайте что-нибудь по b-деревьям, как они устроены, например, книжку Тиори и Фрай. Тогда поймете, почему при order by a,b сервер не может использовать индекс только по a.
-
kda
- Сообщения: 4
- Зарегистрирован: 24 фев 2011, 17:50
Сообщение
kda » 28 июн 2012, 12:02
Спасибо за ответ!
Нет ли "хитрых" методов ускорить отклик сервера в описанном случае при большом кол-ве записей?
Проблема в том, что вместо поля B, может быть использовано поле C, D...
Создавать комбинации индексов на все случаи нет возможности.
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 28 июн 2012, 12:47
Нет ли "хитрых" методов ускорить отклик сервера в описанном случае при большом кол-ве записей?
почитайте
viewtopic.php?f=4&t=4175
в статье примеры с группировкой, но при группировке используется тот же метод доступа, что и при order by index. Производительность на идентичных данных будет одинаковой что при group by, что при order by.
Создавать комбинации индексов на все случаи нет возможности.
разумеется. но стремление делать order by по индексу на "большом количестве данных" как раз является противоречием. Потому что на большом количестве данных order by по индексу приведет к огромному количеству перечитываний страниц БД с диска, что замедлит работу.