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

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

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

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

AriochИли затраты на перестройку desc-индеков при добавлении значений "в конец" намного меньше?
как раз они выше. Добавлять-то ты будешь увеличивающиеся значения, значит в desc-индекс они будут попадать "в начало", а не в конец.
Вообще, при разработке структуры физику лучше держать на втором плане. Модель, ориентированная на "как лучше для desc-индексов" порочна изначально.
...
Рейтинг: 0 / 0
01.12.2015, 15:33
    #39117459
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PK-индекс - ascending или descending ?
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
01.12.2015, 15:44
    #39117477
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PK-индекс - ascending или descending ?
AriochТо есть как-то кажется, что движок мог бы иметь оптимизацию именно под чтение последних данных в таблице
хочется заткнуть уши или выколоть себе глаза :-)
ну какие еще "последние данные" в РСУБД? Б-дерево (индекс) - да, имеет такую структуру, что оптимальнее всего добавление последовательно увеличивающихся значений ключа. И что? А будет какой-то другой тип индекса, и вся твоя "оптимизация" пойдет прахом.

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

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

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

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

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

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

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

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

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


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


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

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

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

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

тогда я напомню
http://www.ibase.ru/ibfaq.htm#dtproblem
...
Рейтинг: 0 / 0
02.12.2015, 12:46
    #39118255
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PK-индекс - ascending или descending ?
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
02.12.2015, 13:31
    #39118322
DBConstructor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PK-индекс - ascending или descending ?
kdv, не пользуюсь case средствами для создания объектов базы. Мне непривычно и неудобно. Только sql script, только hardcore.
Позвольте задать малюсенький офтоп вопрос, чтобы из-за ерунды не создавать отдельный топик - в EMS SQL Manager часто пользуюсь "Выполнить только выделенное (Alt+F9)", но в IBExpert никак не могу найти схожего действия. Как в IBExpert реализовано выборочное выполнение sql запросов?
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / PK-индекс - ascending или descending ? / 25 сообщений из 30, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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