Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Косяк или Почему так? / 25 сообщений из 39, страница 1 из 2
23.03.2021, 10:53
    #40056135
Di_LIne
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Косяк или Почему так?
Всем зрасте! :-)
Всё началось с хорошего стеба и глума на мюскулистами.
Потом таки решил проверить FB.

По порядку.
Имеем:
- сервер Wi-V6.3.7.33374 FB 3.0
- БД на всего-то 4 232 810 записей.

Запускаю в IB-Experte простенький запрос select count(*) from ТАБЛЯ
Получаю:
PLAN (ТАБЛЯ NATURAL)
------ Информация о производительности ------
Время подготовки запроса = 0ms
Время выполнения запроса = 2s 953ms

Переписываю запрос: select count(ID) from ТАБЛЯ
На поле ID есть свежесозданный уникальный индекс.
Получаю:
PLAN (ТАБЛЯ NATURAL)
------ Информация о производительности ------
Время подготовки запроса = 0ms
Время выполнения запроса = 3s 156ms


PS: Вини - отдельный респект и уважуху передайте.
...
Рейтинг: 0 / 0
23.03.2021, 11:00
    #40056137
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Косяк или Почему так?
select count(1) что покажет?
...
Рейтинг: 0 / 0
23.03.2021, 11:03
    #40056139
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Косяк или Почему так?
Di_LIne,

ну ты же не первый день на форуме. Знаешь Firebird не умеет делать Only Index Scan. Поэтому с NATURAL всё очевидно.

count(*) быстрее count(ID), потому что во втором случае требуется распаковка записей. В первом просто считаются записи по смещениям.
...
Рейтинг: 0 / 0
23.03.2021, 11:13
    #40056145
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Косяк или Почему так?
Фигасе, явление блудного сына... :)

P.S. Винни нынче мишка и трезвый.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
23.03.2021, 11:15
    #40056146
Di_LIne
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Косяк или Почему так?
Симонов Денис
ну ты же не первый день на форуме. Знаешь Firebird не умеет делать Only Index Scan. Поэтому с NATURAL всё очевидно.

Мапед не мой, а отцов разрабов, а я только объяву повесил.
Для меня - не очевидно такое поведение FB.
Как для кляузы WHERE индекс найти и устроить скан по нему - так FB всё умеет, а тут - нет...

За 2 десятка лет можно было и подрихтовать, что б ползатели по таблям не впадали в шок.

PS: Говорят мускулисты признали багом указанное поведение при select count(*) from и внесли в баг-лист.
...
Рейтинг: 0 / 0
23.03.2021, 11:17
    #40056149
Di_LIne
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Косяк или Почему так?
wadman
select count(1) что покажет?


План
PLAN (S_WORD NATURAL)
------ Информация о производительности ------
Время подготовки запроса = 15ms
Время выполнения запроса = 2s 454ms
...
Рейтинг: 0 / 0
23.03.2021, 11:18
    #40056150
Di_LIne
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Косяк или Почему так?
Гаджимурадов Рустам
Фигасе, явление блудного сына... :)

P.S. Винни нынче мишка и трезвый.

- И тебе привет, Рустам!
...
Рейтинг: 0 / 0
23.03.2021, 11:27
    #40056156
Di_LIne
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Косяк или Почему так?
- Надеюсь ковидло вас всех обошло стороной.

Если чё - я привился Спутником-V, 1 марта была вторая доза.
...
Рейтинг: 0 / 0
23.03.2021, 11:30
    #40056157
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Косяк или Почему так?
Di_LIne,

вот только у мускулистов OIT есть. У нас его отродясь не было.
В Firebird чтобы узнать указывает ли ключ индекса на существующую запись обязательно надо обязательно прочитать страницу данных.
Поэтому говорить что это баг нельзя. Просто нет такого метода доступа и всё.

Вот тут http://www.ibase.ru/dataaccesspaths/ всё подробно описано.
Да в 3.0 появилось кое-что новое (HASH JOIN, буферизация записей для оконных функций), но в целом статья актуальна.
...
Рейтинг: 0 / 0
23.03.2021, 11:33
    #40056159
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Косяк или Почему так?
Di_LIne> За 2 десятка лет можно было и подрихтовать

Там не подрихтуешь, это же не баг.
Индексного покрытия в FB нет (вроде как),
и я даже не знаю, есть ли тикет в трекере...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
23.03.2021, 11:34
    #40056160
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Косяк или Почему так?
Di_LIne> Если чё - я привился Спутником-V

С ним всё в порядке?

P.S. Чак Норрис заболел короновирусом.
У короновируса большие проблемы... (с)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
23.03.2021, 11:48
    #40056170
Di_LIne
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Косяк или Почему так?
to ALL
В FB всё как всегда:
- 2 страницы будут доказывать, что сделать этого категоричеЦки низя.
- 3-я стр. - срачь всех со всеми
- 4-я - начнут думать как исправить.
...
Рейтинг: 0 / 0
23.03.2021, 11:53
    #40056172
Di_LIne
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Косяк или Почему так?
Симонов Денис
Вот тут http://www.ibase.ru/dataaccesspaths/ всё подробно описано.
Да в 3.0 появилось кое-что новое (HASH JOIN, буферизация записей для оконных функций), но в целом статья актуальна.

Пасип!
Читаю....
...
Рейтинг: 0 / 0
23.03.2021, 11:56
    #40056175
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Косяк или Почему так?
Di_LIne,

ни кто не говорит что это сделать нельзя. Обсуждение этой темы было. Вариантов 2:

1. добавить в ключи индекса два номера транзакции: создавшую ключ и удалившую. Это считается слишком дорогим удовольствием
2. Сделать так как в Postgres, через карту видимости. То есть IOS если и будет, то только для таблиц которые меняются относительно редко.

Пока ни того ни другого нет.

Видишь ли багом это можно было бы считать, если бы Firebird принципиально умел Index Only Scan, но по какой-то причине не использовал его в конкретном запросе. А раз не умеет, то это не баг.
...
Рейтинг: 0 / 0
23.03.2021, 12:05
    #40056183
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Косяк или Почему так?
informix по разному считает:

SELECT COUNT(id) FROM table;
SELECT COUNT(*) FROM table;

Первый честно сканирует. Даже не смотря, что поле not null. (800 тыс, >3 сек)
Второй - по индексу, мгновенно. (800 тыс, < 1с).

Микросекунд в софте нет. БД через впн на производстве.
...
Рейтинг: 0 / 0
23.03.2021, 13:05
    #40056216
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Косяк или Почему так?
wadman> Второй - по индексу, мгновенно. (800 тыс, < 1с).

Ну если там есть индексное покрытие (я не в курсе) - неудивительно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
23.03.2021, 13:06
    #40056217
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Косяк или Почему так?
Хотя опять же, странно, что его нет по PK.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
23.03.2021, 13:12
    #40056221
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Косяк или Почему так?
Di_LInePS: Говорят мускулисты признали багом указанное поведение при select count(*) from и
внесли в баг-лист.

Внести-то просто, мы посмотрим когда они его оттуда вынесут. Ибо ихняя ИннаДБ тоже
версионная. Хотя с другой стороны мускулистам не привыкать к возврату неправильного
значения...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
23.03.2021, 14:24
    #40056246
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Косяк или Почему так?
wadman,

у Информикса версионность есть?
...
Рейтинг: 0 / 0
23.03.2021, 14:27
    #40056247
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Косяк или Почему так?
Симонов Денис1. добавить в ключи индекса два номера транзакции: создавшую ключ и удалившую. Это считается слишком дорогим удовольствием
этот вариант забраковали, даже просто id транзакции от версии в ключе - тоже забраковали.
...
Рейтинг: 0 / 0
23.03.2021, 14:31
    #40056251
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Косяк или Почему так?
kdv,

я помню. Остаётся второй вариант. Сделать как у Постргеса с присущими ему ограничениями.
...
Рейтинг: 0 / 0
23.03.2021, 14:33
    #40056253
dimitr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Косяк или Почему так?
ничего не забраковывали. Просто все варианты надо оценивать со всех сторон. А для этого надо сделать хотя бы грубый черновик реализации.
...
Рейтинг: 0 / 0
23.03.2021, 15:06
    #40056265
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Косяк или Почему так?
Я думал вариант с номерами тразакций для отдельного типа индексов
(типа c доп. ключевым словом covering при создании) не забраковали.

Видимо, то ли делать некому/некогда, то ли тестировать особенно не на чём.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
23.03.2021, 15:20
    #40056274
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Косяк или Почему так?
dimitr,

я помню что Мата Хари Энн Харрисон оценивала этот вариант и высказалась о нем негативно.
В любом случае при добавлении номеров транзакции разбухнут индексы, и это даст отрицательный эффект на производительность вообще.
Стоит-ли count(field) таких жертв? Сильно сомневаюсь.

В каких еще случаях мог бы быть нужен номер транзакции в ключе индекса?
...
Рейтинг: 0 / 0
23.03.2021, 15:22
    #40056275
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Косяк или Почему так?
Гаджимурадов Рустам,

ну вот разве что "отдельный тип индексов" - это да. Включая индексы, которые индексируют только часть таблицы.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Косяк или Почему так? / 25 сообщений из 39, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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