powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / FB3 учитывает неиспользуемые поля при подсчёте длины записи для сортировки
5 сообщений из 5, страница 1 из 1
FB3 учитывает неиспользуемые поля при подсчёте длины записи для сортировки
    #38584046
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FB3 учитывает неиспользуемые поля при подсчёте длины записи для сортировки

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
WITH T
AS (SELECT
        NAME,
        SHORTNAME,
        NAME_EN
    FROM COLOR
    UNION ALL
    SELECT
        NAME,
        SHORTNAME,
        NAME_EN
    FROM COLOR
)
SELECT
    NAME
FROM T
ORDER BY NAME_EN 



план

Код: plaintext
1.
2.
3.
4.
Select Expression
    -> Sort (record length: 164, key length: 36)
        -> Union
            -> Table "T COLOR" Full Scan
            -> Table "T COLOR" Full Scan

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
WITH T
AS (SELECT
        NAME,
--        SHORTNAME,
        NAME_EN
    FROM COLOR
    UNION ALL
    SELECT
        NAME,
--        SHORTNAME,
        NAME_EN
    FROM COLOR
)
SELECT
    NAME
FROM T
ORDER BY NAME_EN 



Код: plaintext
1.
2.
3.
4.
Select Expression
    -> Sort (record length: 140, key length: 36)
        -> Union
            -> Table "T COLOR" Full Scan
            -> Table "T COLOR" Full Scan

собственно почему? Если убрать UNION ALL, то record length одинаков что с полем SHORTNAME что без него.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
WITH T
AS (SELECT
        NAME,
        SHORTNAME,
        NAME_EN
    FROM COLOR
)
SELECT
    NAME
FROM T
ORDER BY NAME_EN 



Код: plaintext
1.
2.
Select Expression
    -> Sort (record length: 120, key length: 36)
        -> Table "T COLOR" Full Scan

И почему вообще UNION ALL увеличил длину записи?
...
Рейтинг: 0 / 0
FB3 учитывает неиспользуемые поля при подсчёте длины записи для сортировки
    #38584057
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это видно и на вот таком запросе

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
WITH T
AS (SELECT
       1 AS A,
       2 AS B,
       3 AS C
    FROM RDB$DATABASE
    UNION ALL
    SELECT
       1 AS A,
       2 AS B,
       3 AS C
    FROM RDB$DATABASE
)
SELECT
    A
FROM T
ORDER BY C
...
Рейтинг: 0 / 0
FB3 учитывает неиспользуемые поля при подсчёте длины записи для сортировки
    #38584126
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
во-первых, FB3 тут не причем, так во всех версиях. Подробнее отвечу попозже.
...
Рейтинг: 0 / 0
FB3 учитывает неиспользуемые поля при подсчёте длины записи для сортировки
    #38584137
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitr,

ну это я понял. Просто до FB3 этого увидеть нельзя было
...
Рейтинг: 0 / 0
FB3 учитывает неиспользуемые поля при подсчёте длины записи для сортировки
    #38584320
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

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

также любой юнион тащит за собой в сортировку dbkey для каждого своего дочернего контекста. Этому есть свои причины, хотя я пока не на 100% уверен, что это необходимо во всех случаях. Но вряд ли это будет меняться в ближайшее время.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / FB3 учитывает неиспользуемые поля при подсчёте длины записи для сортировки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]