powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / PK-индекс - ascending или descending ?
25 сообщений из 30, страница 1 из 2
PK-индекс - ascending или descending ?
    #39116681
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос больше теоретический, от любопытства. Реального ограничения скорости тут не будет.

В таблице будут храниться некие сущности.

PK_ID -> Integer, PK, Gen_ID(..., +1)
Entity_ID -> varchar до пары десятков символов, разные
Дополнительные поля.

Дополнительные поля могут меняться, при этом в таблицу дописывается новая запись и тем же Entity_ID
Но запись новых строк будет редко. И скорее всего чаще это будут новые Entity, чем изменения старых.

При этом в 90% случаев читаться будут только текущие записи, т.е. с MAX(PK_ID) для каждой Entitity_ID.
Соответсвие Entity -> Max_PK_ID можно брать из отдельной таблицы.

Есть ли разница, будет ли индекс на PK возрастающим или убывающим? IBExpert его создает возрастающим и менять потом не дает.
( Знаю, можно сначала создать индекс и потом его задействовать в ПК. Но - любопытно )

И тут возникает вопрос... Для поиска строк с большими ID вроде бы эффективнее descending-индексы (для того и нужны). По большому счёту будут читаться все записи "конца" таблицы с немногочисленными пропусками.

// "конец" в кавычках, потому что это с т. зр. величины PK и времени занесения, физически конечно может упасть в любую страницу файла.

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

То есть казалось бы для PK разумнее по умолчанию создавать desc-индексы, они как правило будут либо не хуже asc-индексов, либо лучше.

Или затраты на перестройку desc-индеков при добавлении значений "в конец" намного меньше?

Где-то вообще было сравнение, в чем по затратам на разные операции лучше asc и desc индексы? Почему именно asc выбранны по умолчанию ?

Ведь если то же соответсвие Entity -> Max_PK_ID хранить не в отдельной таблице, а в композитном индексе, то индекс (asc Entity, desc PK) будет работать лучше, чем (asc Entity, asc PK), при чтении/поиске данных среди последних записей для каждой из многих Entity ?
...
Рейтинг: 0 / 0
PK-индекс - ascending или descending ?
    #39116702
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochЗнаю, можно сначала создать индекс и потом его задействовать в ПК.
Нельзя. USING создаёт новый индекс, только с нужным именем и параметрами.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
PK-индекс - ascending или descending ?
    #39116747
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochтолько текущие записи, т.е. с MAX(PK_ID) для каждой Entitity_ID.
хреновая идея, как-то странно от тебя слышать. Куда логичнее в "таблице сущностей" хранить актуальное, а в дополнительной - историю изменений. И в дополнительную лезть только тогда, когда это действительно надо.

AriochЕсть ли разница, будет ли индекс на PK возрастающим или убывающим?
кроме PLAN TABLE ORDER INDEX - нет.

AriochИли затраты на перестройку desc-индеков при добавлении значений "в конец" намного меньше?
как раз они выше. Добавлять-то ты будешь увеличивающиеся значения, значит в desc-индекс они будут попадать "в начало", а не в конец.
Вообще, при разработке структуры физику лучше держать на втором плане. Модель, ориентированная на "как лучше для desc-индексов" порочна изначально.
...
Рейтинг: 0 / 0
PK-индекс - ascending или descending ?
    #39117459
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvAriochИли затраты на перестройку desc-индеков при добавлении значений "в конец" намного меньше?
как раз они выше. Добавлять-то ты будешь увеличивающиеся значения, значит в desc-индекс они будут попадать "в начало", а не в конец.

А, блин, вечер... Это и имел в виду, но описался "наоборот".

Ну мало ли, может быть там дерево индекса как-то "от середины" хранится, что новые страницы можно в оба конца добавлять.

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

В конце концов это ведь тоже общее место что как правило доступ выполняется к последним данным, а не к старым. Это и кэши всякие разные(LRU), и heap-менеджеры(infants mortality), etc.

То есть как-то кажется, что движок мог бы иметь оптимизацию именно под чтение последних данных в таблице... Или SSD редки а на разнице HDD/RAM никакая оптимизация не будет заметна ?

kdvAriochтолько текущие записи, т.е. с MAX(PK_ID) для каждой Entitity_ID.
хреновая идея, как-то странно от тебя слышать. Куда логичнее в "таблице сущностей" хранить актуальное, а в дополнительной - историю изменений. И в дополнительную лезть только тогда, когда это действительно надо.

Вообще, при разработке структуры физику лучше держать на втором плане. Модель, ориентированная на "как лучше для desc-индексов" порочна изначально.

Тут будет около десятка чтений в минуту и столько же записей в сутки.
А двумя таблицы - это дублирование как минимум структуры (если актуальные ущности в историю не входят, и всю историю соединять через вьюху с union - не люблю я почему-то union'ы подсознательно может быть зря), а то и данные тоже ( если таблица сущностей будет дублироваться как часть таблицы истории). Денормализацией немного отдает, нарушением DRY.
Оно понятно, когда ради производительности это делается.

А малонагруженные таблицы иногда можно подумать над разными изысками и заодно над внутренними механизмами.

Вот в частности, как мне кажется, может я не прав, за и против при выборе типа индексе в FAQах/доках не раскрыто. Предположить можно (я примерно так и преполагал), но именно предположить.

А уж тем более оценку при каком соотношении read/write выравниваются затраты/выигрыш от asc/desc индекса
...
Рейтинг: 0 / 0
PK-индекс - ascending или descending ?
    #39117477
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochТо есть как-то кажется, что движок мог бы иметь оптимизацию именно под чтение последних данных в таблице
хочется заткнуть уши или выколоть себе глаза :-)
ну какие еще "последние данные" в РСУБД? Б-дерево (индекс) - да, имеет такую структуру, что оптимальнее всего добавление последовательно увеличивающихся значений ключа. И что? А будет какой-то другой тип индекса, и вся твоя "оптимизация" пойдет прахом.

К тому же, сравнить элементарно. Создаешь таблицу с bigint, индекс asc, вливаешь 1-5 миллионов записей, замеряешь время.
Потом опять создаешь таблицу, индекс desc, вливаешь столько же, замеряешь.
AriochТут будет около десятка чтений в минуту и столько же записей в сутки.
зачем делать кривую реализацию с таким расчетом?
AriochА двумя таблицы - это дублирование как минимум структуры
Денормализацией немного отдает
ничего страшного и ужасного тут нет.
AriochОно понятно, когда ради производительности это делается.
да тебя фиг поймешь. то ты запросы собираешься писать "с учетом направления индекса", то тебе дублирование таблицы поперек встало. И все это для "десятка чтений в минуту и столько же записей в сутки". В этом случае тебе вообще должно быть наплевать и на индексы, и на union, и на все остальное.
...
Рейтинг: 0 / 0
PK-индекс - ascending или descending ?
    #39117489
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я же сразу написал - "Вопрос больше теоретический, от любопытства"

Ну да, в одной кривизне "ничего стращного нет" а другая кривизна - ужас-ужас
...
Рейтинг: 0 / 0
PK-индекс - ascending или descending ?
    #39117614
DBConstructor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochСоответсвие Entity -> Max_PK_ID можно брать из отдельной таблицы.
Не догнал explain. Зачем Max_PK_ID брать из отдельной таблицы, если он лежит в генераторе и может быть получен по GEN_ID(..., 0)?
...
Рейтинг: 0 / 0
PK-индекс - ascending или descending ?
    #39117631
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DBConstructor,

да щаз. А ничего что INSERT может завершится с ошибкой, а генератор всё равно дёрнется?
...
Рейтинг: 0 / 0
PK-индекс - ascending или descending ?
    #39117639
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Симонов Денис!
You wrote on 1 декабря 2015 г. 17:34:08:

Симонов Денис> да щаз. А ничего что INSERT может завершится с ошибкой, а генератор всё равно дёрнется?

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
PK-индекс - ascending или descending ?
    #39117646
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DBConstructor,

там раные entity и у каждой свой максимум

ты предлагаешь select max(pk_id)

а речь про select max(pk_id), entity_id group by entity_id
...
Рейтинг: 0 / 0
PK-индекс - ascending или descending ?
    #39117649
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

Вот, вот ! давно надо исправить этот баг, что генераторы не видят транзакций !!!!11адынадынадын
...
Рейтинг: 0 / 0
PK-индекс - ascending или descending ?
    #39117661
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochдавно надо исправить этот баг, что генераторы не видят транзакций !!!!
Уже исправлено в тройке. Достаточно в начале транзакции выполнить запрос SET GENERATOR.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
PK-индекс - ascending или descending ?
    #39117669
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovAriochдавно надо исправить этот баг, что генераторы не видят транзакций !!!!
Уже исправлено в тройке. Достаточно в начале транзакции выполнить запрос SET GENERATOR.


чего? SET GENERATOR в тройке это DDL со всеми вытекающими
...
Рейтинг: 0 / 0
PK-индекс - ascending или descending ?
    #39117672
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисчего? SET GENERATOR в тройке это DDL со всеми вытекающими
И что, от этого его запретили выполнять в начале транзакции?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
PK-индекс - ascending или descending ?
    #39117678
DBConstructor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисда щаз. А ничего что INSERT может завершится с ошибкой, а генератор всё равно дёрнется?
Кудыж он денется-то с приращением НОЛЬ? На:
Код: sql
1.
2.
SELECT GEN_ID("YourGenerator", 0) FROM RDB$DATABASE;
COMMIT WORK;


Хоть сто раз выполни - как был, так и останется.
...
Рейтинг: 0 / 0
PK-индекс - ascending или descending ?
    #39117688
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DBConstructor,

Если ПРЕДЫДУЩИЙ insert выдал ошибку, то его генератор дернулся, а max(id) остался прежним.
...
Рейтинг: 0 / 0
PK-индекс - ascending или descending ?
    #39117709
DBConstructor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, в этом смысле... Можно дергать генератор в конце триггера последней POSITION.
...
Рейтинг: 0 / 0
PK-индекс - ascending или descending ?
    #39117714
DBConstructor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хотя... Не поможет, если EXCEPTION вывалится в триггере AFTER.
...
Рейтинг: 0 / 0
PK-индекс - ascending или descending ?
    #39117716
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

в общем, сам видишь, это не я такой, это погода такая
...
Рейтинг: 0 / 0
PK-индекс - ascending или descending ?
    #39117920
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DBConstructorSELECT GEN_ID("YourGenerator", 0)
за двойные кавычки надо розгами пороть.
...
Рейтинг: 0 / 0
PK-индекс - ascending или descending ?
    #39118036
DBConstructor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv, не вижу ничего предосудительного в использовании 3-го диалекта
...
Рейтинг: 0 / 0
PK-индекс - ascending или descending ?
    #39118217
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DBConstructor,

Не вижу ничего предосудительного в использовании розг.
...
Рейтинг: 0 / 0
PK-индекс - ascending или descending ?
    #39118223
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DBConstructor,

тогда я напомню
http://www.ibase.ru/ibfaq.htm#dtproblem
...
Рейтинг: 0 / 0
PK-индекс - ascending или descending ?
    #39118255
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

Кстати, там еще одна фишка с "закавыченными" именами есть (оно вроде в разделе "что НЕ нужно делать с IB/FB" есть) - можно создать таблицу как:
Код: sql
1.
2.
3.
4.
  create table MyTable(
  "Id" integer,
  "ID" integer,
  "iD" integer);

И запрос типа
Код: sql
1.
select * from MyTable

со стороны Delphi-приложения при использовании стандартных DataSource/DataSet сносит приложению крышу.
...
Рейтинг: 0 / 0
PK-индекс - ascending или descending ?
    #39118322
DBConstructor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv, не пользуюсь case средствами для создания объектов базы. Мне непривычно и неудобно. Только sql script, только hardcore.
Позвольте задать малюсенький офтоп вопрос, чтобы из-за ерунды не создавать отдельный топик - в EMS SQL Manager часто пользуюсь "Выполнить только выделенное (Alt+F9)", но в IBExpert никак не могу найти схожего действия. Как в IBExpert реализовано выборочное выполнение sql запросов?
...
Рейтинг: 0 / 0
25 сообщений из 30, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / PK-индекс - ascending или descending ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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