Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / Линтер, получить id вставленной записи / 16 сообщений из 16, страница 1 из 1
21.06.2007, 15:15
    #34611175
unas
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Линтер, получить id вставленной записи
СУБД Линтер.
В качестве поля с id-шками записей использую bigint autoinc .
Популярный вопрос: возможно ли тут быстро получить id только что вставленной записи? max(id) не подходит, т.к. выполняется очень долго, и с увеличением кол-ва записей в таблице все дольше и дольше...
...
Рейтинг: 0 / 0
21.06.2007, 19:12
    #34612095
pavelvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Линтер, получить id вставленной записи
Используйте sequence.
...
Рейтинг: 0 / 0
22.06.2007, 12:22
    #34613271
unas
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Линтер, получить id вставленной записи
Спасибо.
А интересно, что будет быстрее, SEQUENCE или своя реализация генератора id: табличка с id и именем таблицы, для которой этот id хранится и процедурка типа get_id(tab_name), которая возвращает инкрементированный id ?
...
Рейтинг: 0 / 0
22.06.2007, 12:51
    #34613406
Gluk (Kazan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Линтер, получить id вставленной записи
unasСпасибо.
А интересно, что будет быстрее, SEQUENCE или своя реализация генератора id: табличка с id и именем таблицы, для которой этот id хранится и процедурка типа get_id(tab_name), которая возвращает инкрементированный id ?

а сам то как думаешь ?
...
Рейтинг: 0 / 0
24.06.2007, 11:24
    #34615710
xuser
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Линтер, получить id вставленной записи
Немного дополню ответ Павла. Можно и не использовать SEQUENCE:

create table test (i bigint autoinc);
insert into test values (1111111111111);
select cast (last_autoinc as bigint);
...
Рейтинг: 0 / 0
25.06.2007, 08:06
    #34616311
Gluk (Kazan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Линтер, получить id вставленной записи
xuserНемного дополню ответ Павла. Можно и не использовать SEQUENCE:

create table test (i bigint autoinc);
insert into test values (1111111111111);
select cast (last_autoinc as bigint);

А из конкурирующих сессий это будет нормально отрабатывать ?
...
Рейтинг: 0 / 0
25.06.2007, 20:00
    #34618643
xuser
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Линтер, получить id вставленной записи
Gluk (Kazan)[quot xuser]Немного дополню ответ Павла. Можно и не использовать SEQUENCE:

А из конкурирующих сессий это будет нормально отрабатывать ?

В рамках сессии (в Линтере это соединение) будет отрабатывать нормально.
То есть для каждого из отдельно открытых соединений LAST_AUTOINC будет свой.
...
Рейтинг: 0 / 0
26.06.2007, 10:15
    #34619189
Gluk (Kazan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Линтер, получить id вставленной записи
xuser Gluk (Kazan)[quot xuser]Немного дополню ответ Павла. Можно и не использовать SEQUENCE:

А из конкурирующих сессий это будет нормально отрабатывать ?

В рамках сессии (в Линтере это соединение) будет отрабатывать нормально.
То есть для каждого из отдельно открытых соединений LAST_AUTOINC будет свой.

А в плане производительности ?
Значения кэшируются ?
...
Рейтинг: 0 / 0
26.06.2007, 10:51
    #34619298
pavelvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Линтер, получить id вставленной записи
Gluk (Kazan)А в плане производительности ?
Значения кэшируются ? Значение LAST_AUTOINC хранится в области данных соединения.
Быстрее быть не может :-)
...
Рейтинг: 0 / 0
26.06.2007, 11:18
    #34619418
Gluk (Kazan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Линтер, получить id вставленной записи
pavelvp Gluk (Kazan)А в плане производительности ?
Значения кэшируются ? Значение LAST_AUTOINC хранится в области данных соединения.
Быстрее быть не может :-)

Гмм. не понял. А как тогда разным сессиям раздаются непересекающиеся значения ???
Или просто загодя кэшируется очередное ???
...
Рейтинг: 0 / 0
28.06.2007, 13:30
    #34625976
xuser
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Линтер, получить id вставленной записи
Gluk (Kazan) pavelvp Gluk (Kazan)А в плане производительности ?
Значения кэшируются ? Значение LAST_AUTOINC хранится в области данных соединения.
Быстрее быть не может :-)

Гмм. не понял. А как тогда разным сессиям раздаются непересекающиеся значения ???
Или просто загодя кэшируется очередное ???

Когда идет INSERT в таблицу с AUTOINC-столбцом, для AUTOINC-столбца выбирается
очередное значение из описания таблицы и описание таблицы корректируется.
Затем выбранное значение копируется в область данных того соединения, которое
подало запрос, чтобы последующий LAST_AUTOINC вернул его.
...
Рейтинг: 0 / 0
28.06.2007, 14:59
    #34626322
Gluk (Kazan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Линтер, получить id вставленной записи
xuser Gluk (Kazan) pavelvp Gluk (Kazan)А в плане производительности ?
Значения кэшируются ? Значение LAST_AUTOINC хранится в области данных соединения.
Быстрее быть не может :-)

Гмм. не понял. А как тогда разным сессиям раздаются непересекающиеся значения ???
Или просто загодя кэшируется очередное ???

Когда идет INSERT в таблицу с AUTOINC-столбцом, для AUTOINC-столбца выбирается
очередное значение из описания таблицы и описание таблицы корректируется.
Затем выбранное значение копируется в область данных того соединения, которое
подало запрос, чтобы последующий LAST_AUTOINC вернул его.

Значит быстрее быть МОЖЕТ. В Oracle (не знаю как в Линтер) sequence можно кэшировать заранее :)
...
Рейтинг: 0 / 0
28.06.2007, 15:03
    #34626340
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Линтер, получить id вставленной записи
Привет, Gluk!
Ты пишешь:

GlukВ Oracle (не знаю как в Линтер) sequence можно кэшировать заранее :)подробнее, плс, в нескольких словах.
довольно интересно.

--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
28.06.2007, 16:07
    #34626575
Gluk (Kazan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Линтер, получить id вставленной записи
в create sequence есть фраза cache N, которая сильно облегчает жизнь при массовой вставке данных к примеру. Разумеется возможные дыры в последовательности сильно разрастаются, но это мало кого волнует
...
Рейтинг: 0 / 0
28.06.2007, 16:15
    #34626602
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Линтер, получить id вставленной записи
Привет, Gluk!
Ты пишешь:

GlukGK> в create sequence есть фраза cache N, которая сильно облегчает жизнь при массовой вставке данных к примеру.
GK> Разумеется возможные дыры в последовательности сильно разрастаются, но это мало кого волнуетинтересно.
а кеширование этой N-й последовательности
глобальное, или в рамках одной сессии?
тестирование скорости вставки кто-нить проводил?
интересно сравнить, с кешированием и без него.

--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
28.06.2007, 16:59
    #34626789
Gluk (Kazan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Линтер, получить id вставленной записи
Мимопроходящий
тестирование скорости вставки кто-нить проводил?
интересно сравнить, с кешированием и без него.


порой только оно и спасает ;)
работает надежно

как такое можно реализовать на базе автоинкремента, представляю себе с трудом
...
Рейтинг: 0 / 0
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / Линтер, получить id вставленной записи / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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