SQLRU.net
Разработка приложений баз данных

Начало » Использование СУБД » Firebird, HQbird, InterBase » Ненужные сканы записей при rows
Ненужные сканы записей при rows [сообщение #5911] Fri, 21 February 2025 12:49 Переход к предыдущему сообщению
marcodor в настоящее время не в онлайне  marcodor
Сообщений: 4
Зарегистрирован: June 2022
Junior Member
Добрый день,

Имеем такой запрос:

select
  b.id, b.fdate,
  c.code, c.name
from ta_bundle b
left join ta_entity c on (c.id = b.entity_id)
rows 1000 to 1010

План выполнения:

Select Expression
    -> First N Records
        -> Skip N Records
            -> Nested Loop Join (outer)
                -> Table "TA_BUNDLE" as "B" Full Scan
                -> Filter
                    -> Table "TA_ENTITY" as "C" Access By ID
                        -> Bitmap
                            -> Index "PK_TA_ENTITY" Unique Scan

Сканы записей из таблиц:

TA_BUNDLE - 1010
TA_ENTITY - 1010

Хочется чтобы при больших таблицах и скипов движок читал только нужные 10 записей из TA_ENTITY, а не все 1010.


Через lateral то же самое получается:

select
  b.id, b.fdate,
  c.code, c.name
from ta_bundle b
left join lateral (
  select c.code, c.name
  from ta_entity c
  where c.id = b.entity_id) c on true
rows 1000 to 1010

Работает хорошо только когда подзапрос:

select
  b.id, b.fdate,
  -- ? c.code
  (select c.name from ta_entity c where c.id = b.entity_id)
from ta_bundle b
rows 1000 to 1010

Но так больше одного поля не вытянуть из другой таблицы.
Можно как-то по другому сформировать запрос чтобы движок оптимально сканировал записи?
Тестирую с FB 5.0.1
 
Сообщение не прочитано
Сообщение не прочитано
Сообщение не прочитано
Сообщение не прочитано
Сообщение не прочитано
Предыдущая тема: Непонятное изменение плана
Следующая тема: Полнотекстовый поиск для Firebird
Переход к форуму:
  


Текущее время: Sun Feb 23 13:18:20 GMT+3 2025

Общее время, затраченное на создание страницы: 0.00833 секунд