|
Косяк или Почему так?
|
|||
---|---|---|---|
#18+
Всем зрасте! :-) Всё началось с хорошего стеба и глума на мюскулистами. Потом таки решил проверить 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: Вини - отдельный респект и уважуху передайте. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2021, 10:53 |
|
Косяк или Почему так?
|
|||
---|---|---|---|
#18+
select count(1) что покажет? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2021, 11:00 |
|
Косяк или Почему так?
|
|||
---|---|---|---|
#18+
Di_LIne, ну ты же не первый день на форуме. Знаешь Firebird не умеет делать Only Index Scan. Поэтому с NATURAL всё очевидно. count(*) быстрее count(ID), потому что во втором случае требуется распаковка записей. В первом просто считаются записи по смещениям. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2021, 11:03 |
|
Косяк или Почему так?
|
|||
---|---|---|---|
#18+
Фигасе, явление блудного сына... :) P.S. Винни нынче мишка и трезвый. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2021, 11:13 |
|
Косяк или Почему так?
|
|||
---|---|---|---|
#18+
Симонов Денис ну ты же не первый день на форуме. Знаешь Firebird не умеет делать Only Index Scan. Поэтому с NATURAL всё очевидно. Мапед не мой, а отцов разрабов, а я только объяву повесил. Для меня - не очевидно такое поведение FB. Как для кляузы WHERE индекс найти и устроить скан по нему - так FB всё умеет, а тут - нет... За 2 десятка лет можно было и подрихтовать, что б ползатели по таблям не впадали в шок. PS: Говорят мускулисты признали багом указанное поведение при select count(*) from и внесли в баг-лист. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2021, 11:15 |
|
Косяк или Почему так?
|
|||
---|---|---|---|
#18+
wadman select count(1) что покажет? План PLAN (S_WORD NATURAL) ------ Информация о производительности ------ Время подготовки запроса = 15ms Время выполнения запроса = 2s 454ms ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2021, 11:17 |
|
Косяк или Почему так?
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам Фигасе, явление блудного сына... :) P.S. Винни нынче мишка и трезвый. - И тебе привет, Рустам! ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2021, 11:18 |
|
Косяк или Почему так?
|
|||
---|---|---|---|
#18+
- Надеюсь ковидло вас всех обошло стороной. Если чё - я привился Спутником-V, 1 марта была вторая доза. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2021, 11:27 |
|
Косяк или Почему так?
|
|||
---|---|---|---|
#18+
Di_LIne, вот только у мускулистов OIT есть. У нас его отродясь не было. В Firebird чтобы узнать указывает ли ключ индекса на существующую запись обязательно надо обязательно прочитать страницу данных. Поэтому говорить что это баг нельзя. Просто нет такого метода доступа и всё. Вот тут http://www.ibase.ru/dataaccesspaths/ всё подробно описано. Да в 3.0 появилось кое-что новое (HASH JOIN, буферизация записей для оконных функций), но в целом статья актуальна. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2021, 11:30 |
|
Косяк или Почему так?
|
|||
---|---|---|---|
#18+
Di_LIne> За 2 десятка лет можно было и подрихтовать Там не подрихтуешь, это же не баг. Индексного покрытия в FB нет (вроде как), и я даже не знаю, есть ли тикет в трекере... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2021, 11:33 |
|
Косяк или Почему так?
|
|||
---|---|---|---|
#18+
Di_LIne> Если чё - я привился Спутником-V С ним всё в порядке? P.S. Чак Норрис заболел короновирусом. У короновируса большие проблемы... (с) Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2021, 11:34 |
|
Косяк или Почему так?
|
|||
---|---|---|---|
#18+
to ALL В FB всё как всегда: - 2 страницы будут доказывать, что сделать этого категоричеЦки низя. - 3-я стр. - срачь всех со всеми - 4-я - начнут думать как исправить. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2021, 11:48 |
|
Косяк или Почему так?
|
|||
---|---|---|---|
#18+
Симонов Денис Вот тут http://www.ibase.ru/dataaccesspaths/ всё подробно описано. Да в 3.0 появилось кое-что новое (HASH JOIN, буферизация записей для оконных функций), но в целом статья актуальна. Пасип! Читаю.... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2021, 11:53 |
|
Косяк или Почему так?
|
|||
---|---|---|---|
#18+
Di_LIne, ни кто не говорит что это сделать нельзя. Обсуждение этой темы было. Вариантов 2: 1. добавить в ключи индекса два номера транзакции: создавшую ключ и удалившую. Это считается слишком дорогим удовольствием 2. Сделать так как в Postgres, через карту видимости. То есть IOS если и будет, то только для таблиц которые меняются относительно редко. Пока ни того ни другого нет. Видишь ли багом это можно было бы считать, если бы Firebird принципиально умел Index Only Scan, но по какой-то причине не использовал его в конкретном запросе. А раз не умеет, то это не баг. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2021, 11:56 |
|
Косяк или Почему так?
|
|||
---|---|---|---|
#18+
informix по разному считает: SELECT COUNT(id) FROM table; SELECT COUNT(*) FROM table; Первый честно сканирует. Даже не смотря, что поле not null. (800 тыс, >3 сек) Второй - по индексу, мгновенно. (800 тыс, < 1с). Микросекунд в софте нет. БД через впн на производстве. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2021, 12:05 |
|
Косяк или Почему так?
|
|||
---|---|---|---|
#18+
wadman> Второй - по индексу, мгновенно. (800 тыс, < 1с). Ну если там есть индексное покрытие (я не в курсе) - неудивительно. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2021, 13:05 |
|
Косяк или Почему так?
|
|||
---|---|---|---|
#18+
Хотя опять же, странно, что его нет по PK. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2021, 13:06 |
|
Косяк или Почему так?
|
|||
---|---|---|---|
#18+
Di_LInePS: Говорят мускулисты признали багом указанное поведение при select count(*) from и внесли в баг-лист. Внести-то просто, мы посмотрим когда они его оттуда вынесут. Ибо ихняя ИннаДБ тоже версионная. Хотя с другой стороны мускулистам не привыкать к возврату неправильного значения... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2021, 13:12 |
|
Косяк или Почему так?
|
|||
---|---|---|---|
#18+
wadman, у Информикса версионность есть? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2021, 14:24 |
|
Косяк или Почему так?
|
|||
---|---|---|---|
#18+
Симонов Денис1. добавить в ключи индекса два номера транзакции: создавшую ключ и удалившую. Это считается слишком дорогим удовольствием этот вариант забраковали, даже просто id транзакции от версии в ключе - тоже забраковали. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2021, 14:27 |
|
Косяк или Почему так?
|
|||
---|---|---|---|
#18+
kdv, я помню. Остаётся второй вариант. Сделать как у Постргеса с присущими ему ограничениями. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2021, 14:31 |
|
Косяк или Почему так?
|
|||
---|---|---|---|
#18+
ничего не забраковывали. Просто все варианты надо оценивать со всех сторон. А для этого надо сделать хотя бы грубый черновик реализации. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2021, 14:33 |
|
Косяк или Почему так?
|
|||
---|---|---|---|
#18+
Я думал вариант с номерами тразакций для отдельного типа индексов (типа c доп. ключевым словом covering при создании) не забраковали. Видимо, то ли делать некому/некогда, то ли тестировать особенно не на чём. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2021, 15:06 |
|
Косяк или Почему так?
|
|||
---|---|---|---|
#18+
dimitr, я помню что Мата Хари Энн Харрисон оценивала этот вариант и высказалась о нем негативно. В любом случае при добавлении номеров транзакции разбухнут индексы, и это даст отрицательный эффект на производительность вообще. Стоит-ли count(field) таких жертв? Сильно сомневаюсь. В каких еще случаях мог бы быть нужен номер транзакции в ключе индекса? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2021, 15:20 |
|
|
start [/forum/topic.php?fid=40&fpage=7&tid=1560082]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
69ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
others: | 11ms |
total: | 186ms |
0 / 0 |