powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Косяк или Почему так?
25 сообщений из 39, страница 1 из 2
Косяк или Почему так?
    #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
Косяк или Почему так?
    #40056137
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select count(1) что покажет?
...
Рейтинг: 0 / 0
Косяк или Почему так?
    #40056139
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Di_LIne,

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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