|
Производительность и количество FK в таблице
|
|||
---|---|---|---|
#18+
Возможно, надо было спросить в "Проектировании БД", но здесь больше шансов на ответ компетентных людей :) Есть несколько таблиц-справочников Код: sql 1. 2. 3.
и др. и одна общая (аггрегирующая сведения) с данными визитов пациентов в определенные ЛПУ к определенным врачам по определенным причинам и т.д. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Планирую добавить в нее еще пару десятков внешних ключей на подобные таблицы. Чтобы получить минимально полезные сведения приходится городить такую конструкцию Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Причем, справочники могут быть с блобами. 1. Насколько оправдан такой подход? 2. Есть ли какие-нибудь подводные камни, про которые надо знать? 3. Если мой подход неоптимален, то какую конструкцию можно использовать взамен? ================= Док. Win10 Ultim x64/Deb 10 amd64/Darwin Cocoa(Monterey): FB 3.0.7.33374, Lazarus 2.3.0(trunk); FPC 3.3.1(trunk) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2022, 18:57 |
|
Производительность и количество FK в таблице
|
|||
---|---|---|---|
#18+
Док, выскажу чисто своё мнение. 1. Вовсе не обязательно поля-ссылки на другие таблицы оформлять как FK. Для начала можно оформить как простое поле, например REASON_VISIT_ID. Далее, если выяснится, что по нему требуется поиск, то можно добавить индекс. FK - это сущность опциональная. Если назвать поле REASON_VISIT_ID, то глядя на его название сразу понятно, куда оно ссылается и лишних FK-индексов городить не требуется. В MySQL лет десять не было никаких FK и все прекрасно жили. 2. Вместо того, чтобы городить ненужные FK-индексы в таблице транзакций, гораздо больше пользы реализовать составные индексы, например (ПАЦИЕНТ_ID, DATEVISIT), (ВРАЧ_ID, DATEVISIT), чтобы получить максимально высокую скорость формирования отчётов. 2. Запрос к куче таблиц через INNER JOIN - это лохотрон. Куда надёжнее строить запрос самостоятельно, начиная с таблицы с транзакциями и подключая через LEFT JOIN таблицы-справочники. Это всегда работает максимально быстро (в отличии от INNER JOIN). ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2022, 22:42 |
|
Производительность и количество FK в таблице
|
|||
---|---|---|---|
#18+
DmSerнапример (ПАЦИЕНТ_ID, DATEVISIT), (ВРАЧ_ID, DATEVISIT), чтобы получить максимально высокую скорость формирования отчётов. лабуда. такие индексы помогут только для отчетов по конкретному пациенту и конкретному врачу. Потому что составные индексы нормально используются только при поиске на равенство по первым сегментам. Как только первый сегмент сравнивается НЕ на равенство, остальные сегменты идут лесом, поиск по ним невозможен, и такой индекс только затормозит работу из-за своей большей толщины, чем одиночный индекс по конкретному столбцу. DmSerначиная с таблицы с транзакциями и подключая через LEFT JOIN таблицы-справочники. Это всегда работает максимально быстро (в отличии от INNER JOIN). опять ерунда какая-то. При inner join оптимизатор сам хорошо выстраивает таблицы и индексы для выборки. При left join он ничего не может, объединяя таблицы по парам в жестко заданном порядке. Кроме того, использовать left join там где нужен inner - это маразм. Раньше таким страдали всякие ERP для "прибивания плана", независимо от содержимого таблиц. Но те, кто это писал, не думали, что в универсальной ERP распределение данных в таблицах может быть сильно разным. И если в одной конторе план получается нормальным, то в другой конторе для других данных на том же запросе с left join получается задница и тормоза. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2022, 23:02 |
|
Производительность и количество FK в таблице
|
|||
---|---|---|---|
#18+
kdvлабуда. такие индексы помогут только для отчетов по конкретному пациенту и конкретному врачу. Потому что составные индексы нормально используются только при поиске на равенство по первым сегментам. Как только первый сегмент сравнивается НЕ на равенство, остальные сегменты идут лесом, поиск по ним невозможен, и такой индекс только затормозит работу из-за своей большей толщины, чем одиночный индекс по конкретному столбцу. Вероятно, что это и требуется - найти по конкретному врачу (или группе врачей) либо по конкретному пациенту (или группе пациентов). kdvопять ерунда какая-то. При inner join оптимизатор сам хорошо выстраивает таблицы и индексы для выборки. При left join он ничего не может, объединяя таблицы по парам в жестко заданном порядке. Кроме того, использовать left join там где нужен inner - это маразм. Намучался я в своё время с этими inner join. Постоянно у пользователей были проблемы с производительностью (в первую очередь из-за неактуальной статистики). В конце концов переделал все запросы на left join. Не помню ни одного случая, где бы left join (вместо inner join) не подошёл. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2022, 23:28 |
|
Производительность и количество FK в таблице
|
|||
---|---|---|---|
#18+
kdv DmSerначиная с таблицы с транзакциями и подключая через LEFT JOIN таблицы-справочники. Это всегда работает максимально быстро (в отличии от INNER JOIN). опять ерунда какая-то. При inner join оптимизатор сам хорошо выстраивает таблицы и индексы для выборки. При left join он ничего не может, объединяя таблицы по парам в жестко заданном порядке. Кроме того, использовать left join там где нужен inner - это маразм. Ну, во первых, именно тут именно inner - НЕ НУЖЕН. Тут как раз outer по смыслу подходит. А во вторых, раз уж у нас такая ситуация когда мы пошли по ссылке, на которой не навешан FK, то и ссылка может привести к тыкву. И при inner у нас тогда и мастер-запись пропадет. kdv Раньше таким страдали всякие ERP для "прибивания плана", независимо от содержимого таблиц. Но те, кто это писал, не думали, что в универсальной ERP распределение данных в таблицах может быть сильно разным. И если в одной конторе план получается нормальным, то в другой конторе для других данных на том же запросе с left join получается задница и тормоза. Несколько раз напоровшись на ситуацию когда сервер при росте базы пытается "сделать мне лучше" и меняет план на совсем херовый я этих inner боюсь как огня. И всегда когда к данным цепляю справочники, делаю это по outer. Бывают конечно исключения, но они - исключения. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 06:27 |
|
Производительность и количество FK в таблице
|
|||
---|---|---|---|
#18+
И я всегда объявляю в базе FK, это неоднократно спасало от кривых данных или удаления записей с зависимостями. Да, это не совсем бесплатно, но в половине случаев индекс нужен, а в остальных случаях - не так оно и мешает. Зато самодокументированность и корректность данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 06:29 |
|
Производительность и количество FK в таблице
|
|||
---|---|---|---|
#18+
В моей микровселенной: У справочников всегда есть первичный ключ с именем ID. Поля-ссылки начинаются с ID_ и далее идет имя таблицы или некоторые другие исторически сложившиеся называния. Код: plsql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 06:32 |
|
Производительность и количество FK в таблице
|
|||
---|---|---|---|
#18+
Док Возможно, надо было спросить в "Проектировании БД", но здесь больше шансов на ответ компетентных людей :) Планирую добавить в нее еще пару десятков внешних ключей на подобные таблицы. Чтобы получить минимально полезные сведения приходится городить такую конструкцию ... 1. Насколько оправдан такой подход? 2. Есть ли какие-нибудь подводные камни, про которые надо знать? 3. Если мой подход неоптимален, то какую конструкцию можно использовать взамен? ================= Док. Win10 Ultim x64/Deb 10 amd64/Darwin Cocoa(Monterey): FB 3.0.7.33374, Lazarus 2.3.0(trunk); FPC 3.3.1(trunk) всегда так делаю. иногда еще в таблицу-связку пишу денормализованные данные, т.к. справочники могут поменяться из камней - иногда приходится добавлять нолики, т.к. план может внезапно измениться INNER JOIN TBL_PEOPLE PM ON (JP.FK_PEOPLE = PM.ID+0) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 09:43 |
|
Производительность и количество FK в таблице
|
|||
---|---|---|---|
#18+
Спасибо за мнения. Т.е. пока резюме такое: * Поменять inner на outer * Добавление FK вместо составных ключей оправдано и оптимальнее всего Все правильно? Планируется этим запросом выборка данных для конкретного пациента, остальное (кто доктор, цель визита и проч) - меняющиеся детали. По ID визита планируется редактирование записи и отправка ее в отчёт ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 10:05 |
|
Производительность и количество FK в таблице
|
|||
---|---|---|---|
#18+
ДокПоменять inner на outer я бы не стал этого делать без острой необходимости. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 10:16 |
|
Производительность и количество FK в таблице
|
|||
---|---|---|---|
#18+
Док,Добавление FK вместо составных ключей оправдано и оптимальнее всего Не всегда. Я бы, например, очень подумал - добавлять или нет FK на маленький справочник, который не планируется расширять. Например, статус заявки: 1-Активная, 2-Отложена, 3-Удалена. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 11:07 |
|
Производительность и количество FK в таблице
|
|||
---|---|---|---|
#18+
Док Есть несколько таблиц-справочников Код: sql 1. 2.
Док Код: sql 1.
Док и одна общая (аггрегирующая сведения) с данными визитов пациентов в определенные ЛПУ к определенным врачам по определенным причинам и т.д. Надо объяснять для чего она вообще нужна, и если нужна, то может несколько? Для хранимых агрегатов нет универсальных правил, увы. В топик призывается Дед. Док Код: sql 1. 2. 3. 4.
2. Планирую добавить в нее еще пару десятков внешних ключей на подобные таблицы. 3. Чтобы получить минимально полезные сведения приходится городить такую конструкцию 4. Причем, справочники могут быть с блобами. 1. ID_ лучше, чем FK_. Хотя это дело вкуса, конечно (если проект на одного - то пофиг). 2. Таблица c десятками внешних ключей должна автоматически вызывать подозрение. Есть исключения - например, таблица, которая напарсила (или ещё откуда-то извлекла) всякое безобразие, которое "плоское" и плохо раскладывается в несколько таблиц (разве что в ширину). 3. Нормальная конструкция. Если, конечно, на каждый чих делать не все 30 джойнов, а только нужные. 4. Выкинь все INNER. Это, конечно, дело вкуса, но таки лучше просто JOIN. Док 1. Насколько оправдан такой подход? 2. Есть ли какие-нибудь подводные камни, про которые надо знать? 3. Если мой подход неоптимален, то какую конструкцию можно использовать взамен? 2. Совпадающие поля в таблицах. Хотя ФБ вроде на них ругается с какой-то версии. Мелочь, а неприятно. Впрочем, если соблюдать гигиену вегда использовать префиксы, то жить можно. 3. См. п.1. :) Для начала я бы не агрегировал всё подряд и добавил только те FK, которые реально нужны. Авось и не понадобятся 30 ссылок. Во-вторых, сложность и громоздкость резко увеличатся, если/когда у тебя вместо одной такой таблицы появится две - например, TBL_AGG и TBL_AGG_DETAILS (потому что даты или несколько записей или просто потому что). ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 11:09 |
|
Производительность и количество FK в таблице
|
|||
---|---|---|---|
#18+
Док * Добавление FK вместо составных ключей оправдано и оптимальнее всего Док Планируется этим запросом выборка данных для конкретного пациента, остальное (кто доктор, цель визита и проч) - меняющиеся детали. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 11:15 |
|
Производительность и количество FK в таблице
|
|||
---|---|---|---|
#18+
pastor иногда еще в таблицу-связку пишу денормализованные данные, т.к. справочники могут поменяться ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 11:16 |
|
Производительность и количество FK в таблице
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам pastor иногда еще в таблицу-связку пишу денормализованные данные, т.к. справочники могут поменяться Была в прайсе корова рыжая одна. Например, "Каток" а потом стало "Физкультурно-оздоровительное катание для иных категорий граждан" В статистике - одно и то же, а в ОФД уже ушло как ушло. С диагнозами наверняка также. Или хуже. Был кровавый понос, а стало 10 разных категорий по МКБ. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 11:24 |
|
Производительность и количество FK в таблице
|
|||
---|---|---|---|
#18+
pastor> В статистике - одно и то же, а в ОФД уже ушло как ушло. Всё равно не понял. Если справочник периодический, то проблемы нет. Если не периодический, то непонятно как твой подход помогает её решить. Ты же не все поля в таблицу копируешь? > С диагнозами наверняка также. Или хуже. > Был кровавый понос, а стало 10 разных категорий по МКБ. ХЗ, я бы делал новую запись, опционально - со ссылкой на старую, хоть 10 в цепочку. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 11:53 |
|
Производительность и количество FK в таблице
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам pastor> В статистике - одно и то же, а в ОФД уже ушло как ушло. Всё равно не понял. Если справочник периодический, то проблемы нет. Если не периодический, то непонятно как твой подход помогает её решить. Ты же не все поля в таблицу копируешь? > С диагнозами наверняка также. Или хуже. > Был кровавый понос, а стало 10 разных категорий по МКБ. ХЗ, я бы делал новую запись, опционально - со ссылкой на старую, хоть 10 в цепочку. может быть полное описание расчета проката или парковки например. или стринлист параметров на момент оформления. да что угодно. пробовали делать истории, получение актуальной на момент времени и пр. - гемор. компромисс между простотой пользования и возможностями разбора. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 12:16 |
|
Производительность и количество FK в таблице
|
|||
---|---|---|---|
#18+
pastor Был кровавый понос, а стало 10 разных категорий по МКБ. Хранение строковых данных в основной таблице раздует её слишком, тормозить будет. Замените редактирование справочника созданием дубликата со скрытием старого. У новых записей основной таблицы будет новый вариант, у старых останется старый. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 12:41 |
|
Производительность и количество FK в таблице
|
|||
---|---|---|---|
#18+
ggreggory pastor Был кровавый понос, а стало 10 разных категорий по МКБ. Хранение строковых данных в основной таблице раздует её слишком, тормозить будет. Замените редактирование справочника созданием дубликата со скрытием старого. У новых записей основной таблицы будет новый вариант, у старых останется старый. а мне не жалко. я даже логи запросов /ответов http храню. шоп було. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 13:26 |
|
Производительность и количество FK в таблице
|
|||
---|---|---|---|
#18+
pastor> может быть полное описание расчета проката или парковки например. pastor> или стринлист параметров на момент оформления. да что угодно. Ээээ и сколько (по времени и объемам) это всё безобразие хранится? > пробовали делать истории, получение актуальной на момент времени и пр. - гемор. Это да, нужно вьюхи/ХП плодить. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 13:38 |
|
Производительность и количество FK в таблице
|
|||
---|---|---|---|
#18+
ДокТ.е. пока резюме такое: * Поменять inner на outer * Добавление FK вместо составных ключей оправдано и оптимальнее всего Все правильно? У тебя в запросе условие по полю из справочника. Безмозглое применение п.1 может привести пушного зверька. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 13:40 |
|
Производительность и количество FK в таблице
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам pastor> может быть полное описание расчета проката или парковки например. pastor> или стринлист параметров на момент оформления. да что угодно. Ээээ и сколько (по времени и объемам) это всё безобразие хранится? > пробовали делать истории, получение актуальной на момент времени и пр. - гемор. Это да, нужно вьюхи/ХП плодить. 5 лет минимум. обычно - лет 10, до 50 гб, но там и фотки и все такое. логи http - год, логи действий пользователей, телеметрия - до ближайшего обновления БД ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 13:58 |
|
Производительность и количество FK в таблице
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам Выкинь все INNER. Это, конечно, дело вкуса, но таки лучше просто JOIN. Чтобы потом новички и склеротики в гугл лазили успокоить совесть/убедиться, что это одно и то же? Такие сокращения - упыризм чистой воды. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 15:07 |
|
Производительность и количество FK в таблице
|
|||
---|---|---|---|
#18+
YuRock Гаджимурадов Рустам Выкинь все INNER. Это, конечно, дело вкуса, но таки лучше просто JOIN. Такие сокращения - упыризм чистой воды. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 15:23 |
|
Производительность и количество FK в таблице
|
|||
---|---|---|---|
#18+
Мимопроходящий так ты поди и OUTER после LEFT пишешь? И? Я еще "не" или уже "тово"? Запасаться попкорном или уже пора закрывать? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 15:34 |
|
Производительность и количество FK в таблице
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам, все ПК ведут на расширяемые в процессе внесения данных справочники. Если в поле ограниченное количество значений, я просто перечисляю их возможные значения в комменте к полю, куда смотрю, когда на клиенте список выбора формирую Касаемо названий ID...FK - дело привычки. Касаемо количества ФК... Как я понял, если не тащить их всех в запрос, то некритично. Собссно, табличка просто "собирает" в одну кучу ссылки на разнородные сведения. Dimitry Sibiryakov, Дим, ты же знаешь - я тупой гуманитарий. И полунамеков не понимаю. Расшифруй, плз ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 15:54 |
|
Производительность и количество FK в таблице
|
|||
---|---|---|---|
#18+
Док Касаемо количества ФК... Как я понял, если не тащить их всех в запрос, то некритично. Собссно, табличка просто "собирает" в одну кучу ссылки на разнородные сведения. не надо пытаться "оптимизировать" сильно ЗАРАНЕЕ. FK - средство для гарантированного обеспечения целостности данных. зачем же от него отказываться? когда-то, когда деревья были большими, а оптимизатор IB/FB был достаточно тупой, он при виде пары PK-FK впадал в экстаз и тут же пихал соответствующие индексы в PLAN. и пофигу ему было, что план таким образом не всегда получался эффективным. но много воды утекло с тех пор... оптимизатор уже не тот. нет в нём юношеского огня и задора... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 16:07 |
|
Производительность и количество FK в таблице
|
|||
---|---|---|---|
#18+
ДокДим, ты же знаешь - я тупой гуманитарий. И полунамеков не понимаю. Расшифруй, плз Так уточни какое именно слово тебе непонятно чтобы я знал какую часть http://www.ibase.ru/dataaccesspaths/ тебе цитировать. Левым джоином ты отсечёшь возможность использования индекса для фильтрации и получишь гигантский natural scan со всеми вытекающими тормозами. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 16:09 |
|
Производительность и количество FK в таблице
|
|||
---|---|---|---|
#18+
Док, слушай сюда. У любой штуки есть и про и контра. Нет абсолютного зла и абсолютного добра. И эти про и контра надо иметь в виду применительно к своей конкретной задаче и принимать осмысленное решение. Так вот, касательно FK на короткие справочники, вопрос про иннеры с аутерами поднимем чуть позже, пока считаем, что живём с иннерами. С точки зрения целостности FK - это триггер, видящий за счёт использования индекса больше, чем твой триггер, работающий в контексте уровня изоляции твоей транзакции. Поэтому он и не даст тебе сослаться на удалённую в справочнике запись или запись, ID которой был изменён, независимо от того, когда это произошло - до старта твоей транзакции или после и закоммичено оно или нет. Аналогично такой же триггер на справочнике не даст удалить позицию или изменить её ID если есть даже незакоммиченные ссылки в содержательных таблицах. Отсюда следует, что если удаления или изменения ID в справочнике не предусмотрены бизнес-логикой, то в этом и только в этом случае FK не особо и нужен, его вполне можно заменить твоими триггерами на содержательной таблице. Что при этом про. На содержательной таблице из 100500 записей нет херового индекса с 5 значениями. Вред от него двоякий. Не, даже троякий. Во-первых, по мере роста таблицы его херовость в смысле затрат на перестройку при вставках-удалениях-модифицированиях (последнее - например, изменение статуса записи, стадии существования от необслуженной совсем через инстанции рассмотрения к завершению обслуживания). Но это так, тормозишки, на твоих объёмах ты их скорей всего и не заметишь. Настоящие тормоза ты заметишь на ресторе, при построении этого индекса целиком, это во-вторых. В-третьих, если в селективном запросе на эту ссылку наложено условие, оптимизатор может этот индекс и подцепить, независимо от иннер или аутер. Просто при иннере он его может подцепить и при наложении условия на поле в справочнике и построить перебор от справочника. Вот это в-третьих имеет свои про и контра. Если распределение значений в этом поле более-менее равномерное, ты получишь серьёзные тормоза. Если же, как в случае статуса, через годик работы в таблице из 100500 записей 100000 закрытых и 500 в работе, то запрос, отбирающий эти 500 на этот индекс не нарадуется, что есть про. А вот наоборот - заплачешь горючими слезами. Контра в том, что надо об этом помнить и гасить в этом случае ноликами. За иннеры-аутеры. При современном развитии печатного дела на Западе вероятность использования оптимизатором в таких простых случаях херового индекса имхо невелика. На полуторке - да, в полный рост. Должен отметить, что в моей практике, тоиссь, на примерно миллионе сконструированных запросов, раз 5 был случай, когда оптимизатор действительно сложный запрос на иннерах выворачивал даже не через жопу, а через три, причём слоновьих, так что у меня просто глаза на лоб лезли, и при этом результат получался в разы лучше чем у меня при всём моём глубокомудрии в составлении явных планов Но обычно всё-таки наоборот. Напоминаю - речь о полуторке. При запросе-ёлке, тоиссь, соединениях со справочниками одной ведущей таблицы, в общем, похрен, что иннер, что аутер. В случае чего иннер направить легко можно ноликами. А вот если этот запрос впоследствии берётся как основа или компонент действительно сложного с аутерами в смысловой части, то наступить на грабли просто нефиг делать. За композиты. Это мощное оружие, которое может быть как созидательным, так и разрушительным. Если все его сегменты по отдельности херовые, то к нему относится всё, что относится к херовому односегментному индексу. И построение долгоиграющее, и обслуживание нагрузочное, и оптимизатор не особо склонен его подхватывать и результат использования сильно зависит от распределения значений в сегментах, плюс условия на ведущие сегменты должны быть на равенство. Короче, смысл в нём фактически может быть для одного конкретного запроса. И не дай бог его оптимизатор подхватит для другого. Поэтому их обычно усиливают высокоселективным, а то и уникальным сегментом. Если этот сегмент ведущий, то всё чики-пуки, но тогда выгода от него проценты - меньше и быстрее загружаются страницы чем при использовании раздельных индексов на те же сегменты в нужном порядке. А если его прилепляют на жопу для обмана оптимизатора, то опять упираемся в экстремальную выгоду за счёт распределения значений в первом сегменте для запросов, отбирающих антипик распределения и дикие тормоза для остальных, тоиссь memento +0, а то оптимизатор будет его тыкать куда ни пОпадя. За периодические справочники. Это когда в нём не опечатку надо исправить, что должно подействовать на результаты всех запросов. Поскольку формированием содержательных записей обычно занимается гомо боле-мене сапиенс, тоиссь, смотрит на содержимое справочника и тыкает в нужную строчку, имхо проще всего вопрос решается включением в структуру записи справочника диапазоном дат действия и инсёртом новой записи в справочник. Попадание даты документа при формировании в диапазон несложно и проконтролировать. А поскольку по сути несколько записей в справочнике на самом деле есть одна сущность, скажем, организация название меняет, вопрос статистики и прочих агрегатов решается дополнительной таблицей 1:n для группирования в запросах. Но это уже всё имхо. Так вот, Док, уложи сии измышления в личную христа матию и применяй к своим конкретным обстоятельствам, что тебе полезно в каком случае, а что вредно. Тоиссь, не лепи по канонам и чьим-то мнениям, а думай вперёд, Ма-ма, ма-ма, что мы будем делать... ыыы... Ма-ма, ма-ма, как мы будем жить... кууу... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 16:22 |
|
Производительность и количество FK в таблице
|
|||
---|---|---|---|
#18+
Старый плюшевый мишкаВо-первых, по мере роста таблицы его херовость в смысле затрат на перестройку при вставках-удалениях-модифицированиях (последнее - например, изменение статуса записи, стадии существования от необслуженной совсем через инстанции рассмотрения к завершению обслуживания). Насколько мне изменяет мой склероз, как минимум в тройке индекс не трогается вообще если в записи индексированное поле не изменялось. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 16:32 |
|
Производительность и количество FK в таблице
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Насколько мне изменяет мой склероз, как минимум в тройке индекс не трогается вообще если в записи индексированное поле не изменялось. Так тут же речь об индексированном - статус есть ссылка на справочник. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 16:38 |
|
Производительность и количество FK в таблице
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, оно вроде как отродясь так было в ФБ ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 17:17 |
|
Производительность и количество FK в таблице
|
|||
---|---|---|---|
#18+
Старый плюшевый мишка, спасибо. Читал, как увлекательный роман на языке, в котором некоторые слова знакомы Вобщем, вынес для себя пока одно: оставлю, как есть, потом буду посмотреть. Про упомянутые выше DS Левым джоином ты отсечёшь возможность использования индекса для фильтрации и получишь гигантский natural scan со всеми вытекающими тормозами. траблы я уже в курсе, ибо на нынешней базе после 40000 записей появились ощутимые тормоза. Что и сподвигло меня искать другие варианты построения базы. При нынешней структуре (из стартового топика 22432072 ) птичка показывает такой план Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Т.е. неиндексированные чтения все равно есть. Поэтому возник еще вопрос. А если такую структуру Код: plaintext
переделать на Код: plaintext 1.
без изменения структуры T2, будет разница? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 18:25 |
|
Производительность и количество FK в таблице
|
|||
---|---|---|---|
#18+
Ну вот, Дед в топик засаммонился (за что ему спасибо), сказку на ночь спел, а про хранимые агрегаты не рассказал. Незачёт! Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 18:38 |
|
Производительность и количество FK в таблице
|
|||
---|---|---|---|
#18+
Док Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 18:38 |
|
Производительность и количество FK в таблице
|
|||
---|---|---|---|
#18+
Нет предела совершенству! P.S. Может это на пустой БД... P.S.S. Хотя миллионов записей там всё равно никогда не набежит. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 18:40 |
|
Производительность и количество FK в таблице
|
|||
---|---|---|---|
#18+
ДокПри нынешней структуре (из стартового топика птичка показывает такой план Или статистика индексов не пересчитана или запрос не тот или что-то сильно окривело. Первичной таблицей того запроса должна быть PV с индексом по PV.ID, ибо по нему идёт фильтрация во where. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 18:45 |
|
Производительность и количество FK в таблице
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, еще раз: закрыл-открыл IBE запрос-план-статистика Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Код: sql 1. 2. 3.
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Мимопроходящий и что ты хочешь тут оптимизировать?! я просто спросил :) Вобщем, спасибо всем за мысли и участие. Примерно, как быть, я понял ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 19:26 |
|
Производительность и количество FK в таблице
|
|||
---|---|---|---|
#18+
Мимопроходящий YuRock пропущено... Чтобы потом новички и склеротики в гугл лазили успокоить совесть/убедиться, что это одно и то же? Такие сокращения - упыризм чистой воды. OUTER - бесполезное слово. LEFT INNER писать нельзя. Потому - нет, не пишу, т.к. это как раз очевидно. Ivan_Pisarevsky всегда пишу кляузу "as" при указании алиаса для поля Я тоже. Кажется, где-то без этого было нельзя, точно не помню. Плюс, это явный конец выражения - объявление названия. Без AS получается абракадабра типа NAME SOMENAME ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 19:40 |
|
Производительность и количество FK в таблице
|
|||
---|---|---|---|
#18+
YuRockLEFT INNER писать нельзя. В оракуле - можно. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 19:48 |
|
Производительность и количество FK в таблице
|
|||
---|---|---|---|
#18+
DS> YuRock > LEFT INNER писать нельзя. > > В оракуле - можно. Серьёзно что ли? P.S. Лень проверять. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2022, 16:07 |
|
Производительность и количество FK в таблице
|
|||
---|---|---|---|
#18+
https://dbfiddle.uk/?rdbms=oracle_21&fiddle=84b7f664df4882b05a4615bc3552567e Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2022, 16:17 |
|
|
Start [/forum/topic.php?fid=40&tid=1559828&all=1]: |
0ms |
get settings: |
0ms |
get forum list: |
7ms |
check forum access: |
0ms |
check topic access: |
0ms |
track hit: |
25ms |
get topic data: |
3ms |
get forum data: |
0ms |
get page messages: |
32ms |
update_topic_read_status (1559828): 11.02.2022 16:24:46: |
0ms |
get tp. blocked users: |
0ms |
get online users: |
54ms |
check new: |
1ms |
others: | 74ms |
total: | 196ms |
0 / 0 |