|
PK-индекс - ascending или descending ?
|
|||
---|---|---|---|
#18+
Вопрос больше теоретический, от любопытства. Реального ограничения скорости тут не будет. В таблице будут храниться некие сущности. 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 ? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2015, 18:43 |
|
PK-индекс - ascending или descending ?
|
|||
---|---|---|---|
#18+
AriochЗнаю, можно сначала создать индекс и потом его задействовать в ПК. Нельзя. USING создаёт новый индекс, только с нужным именем и параметрами. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2015, 18:57 |
|
PK-индекс - ascending или descending ?
|
|||
---|---|---|---|
#18+
Ariochтолько текущие записи, т.е. с MAX(PK_ID) для каждой Entitity_ID. хреновая идея, как-то странно от тебя слышать. Куда логичнее в "таблице сущностей" хранить актуальное, а в дополнительной - историю изменений. И в дополнительную лезть только тогда, когда это действительно надо. AriochЕсть ли разница, будет ли индекс на PK возрастающим или убывающим? кроме PLAN TABLE ORDER INDEX - нет. AriochИли затраты на перестройку desc-индеков при добавлении значений "в конец" намного меньше? как раз они выше. Добавлять-то ты будешь увеличивающиеся значения, значит в desc-индекс они будут попадать "в начало", а не в конец. Вообще, при разработке структуры физику лучше держать на втором плане. Модель, ориентированная на "как лучше для desc-индексов" порочна изначально. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2015, 19:32 |
|
PK-индекс - ascending или descending ?
|
|||
---|---|---|---|
#18+
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 индекса ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2015, 15:33 |
|
PK-индекс - ascending или descending ?
|
|||
---|---|---|---|
#18+
AriochТо есть как-то кажется, что движок мог бы иметь оптимизацию именно под чтение последних данных в таблице хочется заткнуть уши или выколоть себе глаза :-) ну какие еще "последние данные" в РСУБД? Б-дерево (индекс) - да, имеет такую структуру, что оптимальнее всего добавление последовательно увеличивающихся значений ключа. И что? А будет какой-то другой тип индекса, и вся твоя "оптимизация" пойдет прахом. К тому же, сравнить элементарно. Создаешь таблицу с bigint, индекс asc, вливаешь 1-5 миллионов записей, замеряешь время. Потом опять создаешь таблицу, индекс desc, вливаешь столько же, замеряешь. AriochТут будет около десятка чтений в минуту и столько же записей в сутки. зачем делать кривую реализацию с таким расчетом? AriochА двумя таблицы - это дублирование как минимум структуры Денормализацией немного отдает ничего страшного и ужасного тут нет. AriochОно понятно, когда ради производительности это делается. да тебя фиг поймешь. то ты запросы собираешься писать "с учетом направления индекса", то тебе дублирование таблицы поперек встало. И все это для "десятка чтений в минуту и столько же записей в сутки". В этом случае тебе вообще должно быть наплевать и на индексы, и на union, и на все остальное. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2015, 15:44 |
|
PK-индекс - ascending или descending ?
|
|||
---|---|---|---|
#18+
Я же сразу написал - "Вопрос больше теоретический, от любопытства" Ну да, в одной кривизне "ничего стращного нет" а другая кривизна - ужас-ужас ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2015, 15:51 |
|
PK-индекс - ascending или descending ?
|
|||
---|---|---|---|
#18+
AriochСоответсвие Entity -> Max_PK_ID можно брать из отдельной таблицы. Не догнал explain. Зачем Max_PK_ID брать из отдельной таблицы, если он лежит в генераторе и может быть получен по GEN_ID(..., 0)? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2015, 17:19 |
|
PK-индекс - ascending или descending ?
|
|||
---|---|---|---|
#18+
DBConstructor, да щаз. А ничего что INSERT может завершится с ошибкой, а генератор всё равно дёрнется? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2015, 17:30 |
|
PK-индекс - ascending или descending ?
|
|||
---|---|---|---|
#18+
Hello, Симонов Денис! You wrote on 1 декабря 2015 г. 17:34:08: Симонов Денис> да щаз. А ничего что INSERT может завершится с ошибкой, а генератор всё равно дёрнется? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2015, 17:34 |
|
PK-индекс - ascending или descending ?
|
|||
---|---|---|---|
#18+
DBConstructor, там раные entity и у каждой свой максимум ты предлагаешь select max(pk_id) а речь про select max(pk_id), entity_id group by entity_id ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2015, 17:37 |
|
PK-индекс - ascending или descending ?
|
|||
---|---|---|---|
#18+
Симонов Денис, Вот, вот ! давно надо исправить этот баг, что генераторы не видят транзакций !!!!11адынадынадын ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2015, 17:38 |
|
PK-индекс - ascending или descending ?
|
|||
---|---|---|---|
#18+
Ariochдавно надо исправить этот баг, что генераторы не видят транзакций !!!! Уже исправлено в тройке. Достаточно в начале транзакции выполнить запрос SET GENERATOR. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2015, 17:47 |
|
PK-индекс - ascending или descending ?
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovAriochдавно надо исправить этот баг, что генераторы не видят транзакций !!!! Уже исправлено в тройке. Достаточно в начале транзакции выполнить запрос SET GENERATOR. чего? SET GENERATOR в тройке это DDL со всеми вытекающими ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2015, 17:55 |
|
PK-индекс - ascending или descending ?
|
|||
---|---|---|---|
#18+
Симонов Денисчего? SET GENERATOR в тройке это DDL со всеми вытекающими И что, от этого его запретили выполнять в начале транзакции?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2015, 17:57 |
|
PK-индекс - ascending или descending ?
|
|||
---|---|---|---|
#18+
Симонов Денисда щаз. А ничего что INSERT может завершится с ошибкой, а генератор всё равно дёрнется? Кудыж он денется-то с приращением НОЛЬ? На: Код: sql 1. 2.
Хоть сто раз выполни - как был, так и останется. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2015, 18:04 |
|
PK-индекс - ascending или descending ?
|
|||
---|---|---|---|
#18+
DBConstructor, Если ПРЕДЫДУЩИЙ insert выдал ошибку, то его генератор дернулся, а max(id) остался прежним. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2015, 18:16 |
|
PK-индекс - ascending или descending ?
|
|||
---|---|---|---|
#18+
А, в этом смысле... Можно дергать генератор в конце триггера последней POSITION. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2015, 18:46 |
|
PK-индекс - ascending или descending ?
|
|||
---|---|---|---|
#18+
хотя... Не поможет, если EXCEPTION вывалится в триггере AFTER. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2015, 18:50 |
|
PK-индекс - ascending или descending ?
|
|||
---|---|---|---|
#18+
kdv, в общем, сам видишь, это не я такой, это погода такая ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2015, 18:52 |
|
PK-индекс - ascending или descending ?
|
|||
---|---|---|---|
#18+
DBConstructorSELECT GEN_ID("YourGenerator", 0) за двойные кавычки надо розгами пороть. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2015, 00:31 |
|
PK-индекс - ascending или descending ?
|
|||
---|---|---|---|
#18+
kdv, не вижу ничего предосудительного в использовании 3-го диалекта ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2015, 09:44 |
|
PK-индекс - ascending или descending ?
|
|||
---|---|---|---|
#18+
DBConstructor, Не вижу ничего предосудительного в использовании розг. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2015, 12:18 |
|
PK-индекс - ascending или descending ?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2015, 12:22 |
|
PK-индекс - ascending или descending ?
|
|||
---|---|---|---|
#18+
kdv, Кстати, там еще одна фишка с "закавыченными" именами есть (оно вроде в разделе "что НЕ нужно делать с IB/FB" есть) - можно создать таблицу как: Код: sql 1. 2. 3. 4.
И запрос типа Код: sql 1.
со стороны Delphi-приложения при использовании стандартных DataSource/DataSet сносит приложению крышу. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2015, 12:46 |
|
PK-индекс - ascending или descending ?
|
|||
---|---|---|---|
#18+
kdv, не пользуюсь case средствами для создания объектов базы. Мне непривычно и неудобно. Только sql script, только hardcore. Позвольте задать малюсенький офтоп вопрос, чтобы из-за ерунды не создавать отдельный топик - в EMS SQL Manager часто пользуюсь "Выполнить только выделенное (Alt+F9)", но в IBExpert никак не могу найти схожего действия. Как в IBExpert реализовано выборочное выполнение sql запросов? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2015, 13:31 |
|
|
start [/forum/topic.php?fid=40&fpage=67&tid=1562474]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
34ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
133ms |
get tp. blocked users: |
2ms |
others: | 258ms |
total: | 474ms |
0 / 0 |