|
SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT
|
|||
---|---|---|---|
#18+
Если нужен автоинкремент по одной таблице то что лучше использовать SEQUENCE, IDENTITY , SERIAL или AUTOINCREMENT? Допустим я использовал для: 1. MSSQL - IDENTITY 2. MYSQL - AUTOINCREMENT 3. ORACLE - SEQUENCE + trigger 4. FIREBIRD - SEQUENCE + trigger 5. POSTGRESQL - SEQUENCE + trigger (но он же поддерживает и SERIAL) Кстати, в чем различие IDENTITY, SERIAL и AUTOINCREMENT? Чем от них отличается SEQUENCE понятно - это сквозная нумерация по 1 и более таблиц, но чем он лучше остальных способов не понятно и не очень красиво выглядит триггер с ним на каждую таблицу. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.01.2012, 22:56 |
|
SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT
|
|||
---|---|---|---|
#18+
SEQUENCE vs IDENTITY4. FIREBIRD - SEQUENCE + trigger Не нравится писать собственные триггера - используй AUTOINCREMENT, сервер нужный триггер сам создаст. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.01.2012, 23:03 |
|
SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT
|
|||
---|---|---|---|
#18+
авторДопустим я 1. MSSQL - SEQUENCE + DEFAULT CONSTRAINT авторпо одной таблице ... на каждую таблицу Вы, уж, определитесь в постановке задачи... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.01.2012, 23:14 |
|
SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT
|
|||
---|---|---|---|
#18+
SEQUENCE MS SQLавторДопустим я 1. MSSQL - SEQUENCE + DEFAULT CONSTRAINT авторпо одной таблице ... на каждую таблицу Вы, уж, определитесь в постановке задачи... http://msdn.microsoft.com/en-us/library/ff878091(v=SQL.110).aspx SEQUENCE появиться только в SQL Server 2012. И что значит DEFAULT CONSTRAINT? В SQL Server 2012 можно будет SEQUENCE писать в DEFAULT и он сам будет автоинкремениться при инсертах? К слову в Oracle, Firebird и PostgreSQL так сделать нельзя, нужен обязательно триггер. Постановки задачи как таковой нет - есть необходимость разобраться в каком случае что лучше? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.01.2012, 23:30 |
|
SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT
|
|||
---|---|---|---|
#18+
SEQUENCE vs IDENTITY5. POSTGRESQL - SEQUENCE + trigger (но он же поддерживает и SERIAL)SERIAL + DEFAULT в INSERT'е. Это не создает триггера. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.01.2012, 23:36 |
|
SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT
|
|||
---|---|---|---|
#18+
К слову в Oracle, Firebird и PostgreSQL так сделать нельзя, нужен обязательно триггер. В PostgreSQL триггер не нужен: там есть псевдотип serial, который сам (почти) все делает. При создании колонки, напр., id serial будет создана последовательность, из которой автоматически будут браться значения. Технически это будет id default nextval('sequence_name'). ... |
|||
:
Нравится:
Не нравится:
|
|||
05.01.2012, 23:37 |
|
SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT
|
|||
---|---|---|---|
#18+
SEQUENCE vs IDENTITYВ SQL Server 2012 можно будет SEQUENCE писать в DEFAULT и он сам будет автоинкремениться при инсертах? http://msdn.microsoft.com/en-us/library/ff878370(v=sql.110).aspx Example D SEQUENCE vs IDENTITYПостановки задачи как таковой нет Когда будет - приходите... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.01.2012, 23:38 |
|
SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT
|
|||
---|---|---|---|
#18+
SEQUENCE vs IDENTITYно чем он лучше остальных способов не понятноТем что это механизм генерации уникальных id не привязанный к таблицам и полям. SEQUENCE vs IDENTITY не очень красиво выглядит триггер с ним на каждую таблицу. А явно в инсерте sequence.nexval прописать религия не позволяет? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.01.2012, 23:43 |
|
SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT
|
|||
---|---|---|---|
#18+
SERG1257А явно в инсерте sequence.nexval прописать религия не позволяет? Когда программисту надоедает работать руками - он начинает работать головой. ((с) Не моё) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.01.2012, 23:48 |
|
SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT
|
|||
---|---|---|---|
#18+
SEQUENCE vs IDENTITYЧем от них отличается SEQUENCE понятно - это сквозная нумерация по 1 и более таблиц, но чем он лучше остальных способов не понятно Возможность "оторвать" значение от таблицы даёт свободу манёвра, позволяющую легче реализовывать некоторую функциональность. Типовые варианты использования: Создание/редактирование на клиенте мастер-детальных данных без длинных транзакций Сквозная нумерация однородных сущностей, распределённых по нескольким таблицам Генерация номеров документов Извращения типа "обойти номера записей, вставленных руками" SEQUENCE vs IDENTITY и не очень красиво выглядит триггер с ним на каждую таблицу. Это да. Какого хрена ещё во времена какого-нибудь Oracle 7 не сделали DEFAULT SEQ_NAME.NEXTVAL, я не понимаю и вряд ли пойму. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2012, 11:07 |
|
SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT
|
|||
---|---|---|---|
#18+
SERG1257А явно в инсерте sequence.nexval прописать религия не позволяет? У такого решения есть изрядные недостатки с точки зрения качества кода. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2012, 11:10 |
|
SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT
|
|||
---|---|---|---|
#18+
> У такого решения есть изрядные недостатки с точки зрения качества кода. а переключение контекста в триггере это хорошее качество кода? Каков по Вашему мнению тогда лучший способ вызова nextval в Oracle? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2012, 15:16 |
|
SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT
|
|||
---|---|---|---|
#18+
Shtockа переключение контекста в триггере это хорошее качество кода? Переключение контекста - это вопрос производительности. К качеству кода (в том смысле, в котором обычно понимается это слово) это отношения не имеет. ShtockКаков по Вашему мнению тогда лучший способ вызова nextval в Oracle? Зависит от контекста. В разных ситуациях я их использовал пожалуй что все которые могу придумать, и каждый из них обладает недостатками, позволяющими легко построить контрпример "когда этот способ явно не лучший". ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2012, 16:41 |
|
SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT
|
|||
---|---|---|---|
#18+
Я, например, очень полюбил nextval прямо в select, когда использую insert all. Там без него плохо.... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2012, 17:02 |
|
SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT
|
|||
---|---|---|---|
#18+
ShtockЯ, например, очень полюбил nextval прямо в select, когда использую insert all. Там без него плохо.... Для вставки из запросов в таблицы связанные по FK? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2012, 17:06 |
|
SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT
|
|||
---|---|---|---|
#18+
softwarerЗависит от контекста. В разных ситуациях я их использовал пожалуй что все которые могу придумать, и каждый из них обладает недостатками, позволяющими легко построить контрпример "когда этот способ явно не лучший". здесь играем, здесь не играем, а тут мы рыбу заворачивали (с) и это в контексте качества кода !? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2012, 17:06 |
|
SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT
|
|||
---|---|---|---|
#18+
Yo.!, не приходило ли Вам когда-нибудь в голову, что, например, ETL-загрузка данных, OLTP с процедурной оболочкой над таблицами и, например, толстенный клиент вообще без логики на сервере - это немного разные контексты (не говоря уже о том, что часто разные проекты и разные заказчики), и применять в них один универсально плохой метод будет только... ну в общем кое-кто и будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2012, 17:17 |
|
SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT
|
|||
---|---|---|---|
#18+
>связанные по FK - аха, именно для их. Для моих задач обычное дело когда одним инсертом данные уходят в 3-6 таблиц. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2012, 22:53 |
|
SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT
|
|||
---|---|---|---|
#18+
softwarerи применять в них один универсально плохой метод будет только... ну в общем кое-кто и будет. буквально на днях наблюдал базу от InterBase 4.0. Там несколько генераторов инкрементируются в - некоторые только в триггерах - некоторые только в процедурах - некоторые одновременно в нескольких триггерах (для разных таблиц) - некоторые ни в триггерах, ни в процедурах (а только в приложении), т.е. по базе их назначение понять нельзя. я понимаю, что это все разные методы использования генераторов. Но не понимаю, зачем разработчику потребовалось городить такую кашу. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2012, 03:57 |
|
SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT
|
|||
---|---|---|---|
#18+
kdvя понимаю, что это все разные методы использования генераторов. Но не понимаю, зачем разработчику потребовалось городить такую кашу. Не понимаете - значит, вполне вероятно, зря городил. С другой стороны, например, в первый раз я отступил от принятой в конторе практики генерации id в триггерах, когда требовалось массово грузить в приложение некие данные со стороны, и отказ от этих триггеров увеличил скорость загрузки в пять-десять раз. Полагаете, был неправ? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2012, 11:06 |
|
SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT
|
|||
---|---|---|---|
#18+
В Informix используется Serial, можно еще Sequence, но когда есть Serial зачем использовать что то еще (если нужны последовательные значения)? Не надо городить триггеры, все просто - объявил поле Serial и получай готовые значения. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2012, 21:24 |
|
SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT
|
|||
---|---|---|---|
#18+
Andron , вполне логично. А насколько скорость serial отличается от аналогичной через SEQUENCE + trigger или SEQUENCE в INSERT-запросе? softwarerkdvя понимаю, что это все разные методы использования генераторов. Но не понимаю, зачем разработчику потребовалось городить такую кашу. Не понимаете - значит, вполне вероятно, зря городил. С другой стороны, например, в первый раз я отступил от принятой в конторе практики генерации id в триггерах, когда требовалось массово грузить в приложение некие данные со стороны, и отказ от этих триггеров увеличил скорость загрузки в пять-десять раз. Полагаете, был неправ? 1. Отключили триггеры и импользовали SEQUENCE в инсертах? 2. Или вообще отказались от SEQUENCE? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2012, 22:04 |
|
SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT
|
|||
---|---|---|---|
#18+
SEQUENCE vs IDENTITY1. Отключили триггеры и импользовали SEQUENCE в инсертах? 2. Или вообще отказались от SEQUENCE? Отключил триггеры, сделал сиквенсам increment by 1000 и формировал данные для direct load-а. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2012, 14:20 |
|
SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT
|
|||
---|---|---|---|
#18+
softwarerSEQUENCE vs IDENTITY1. Отключили триггеры и импользовали SEQUENCE в инсертах? 2. Или вообще отказались от SEQUENCE? Отключил триггеры, сделал сиквенсам increment by 1000 и формировал данные для direct load-а. Т.е. в интервалах по 1000 нумеровали уже сами? А установить кэш не пробовали ALTER SEQUENCE seq CACHE 2000; или вообще нумеровать самому без сиквенсов через оконные функции? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2012, 14:44 |
|
SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT
|
|||
---|---|---|---|
#18+
SEQUENCE vs IDENTITYТ.е. в интервалах по 1000 нумеровали уже сами? Да. SEQUENCE vs IDENTITYА установить кэш не пробовали А смысл? Кэш регулирует быстродействие сервера, а целью в данном случае было избежать огромного количества тупых синхронных запросов к серверу "за айдишниками". SEQUENCE vs IDENTITYили вообще нумеровать самому А нафига такое счастье? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2012, 14:50 |
|
SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT
|
|||
---|---|---|---|
#18+
softwarerSEQUENCE vs IDENTITYА установить кэш не пробовали А смысл? Кэш регулирует быстродействие сервера, а целью в данном случае было избежать огромного количества тупых синхронных запросов к серверу "за айдишниками". Это что за синхронные запросы к сервер? Или ты имеешь ввиду сначала получать ID из синквенса с сервера, затем его вставлять в запрос, а затем отправлять запрос на сервер? Нафига такое счастье, когда можно так: Код: plsql 1.
И посылай значения NAME пачками. Или по аналогии без параметризованного запроса. softwarerSEQUENCE vs IDENTITYили вообще нумеровать самому А нафига такое счастье? Это аналогично: "Отключил триггеры, сделал сиквенсам increment by 1000000000 и формировал данные для direct load-а." Т.е. вообще о сиквенсе париться не надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2012, 15:42 |
|
SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT
|
|||
---|---|---|---|
#18+
SEQUENCE vs IDENTITYНафига такое счастье, когда можно так: [src PLSQL] INSERT INTO table (ID, NAME) VALUES(SEQ.NEXT_VAL, :NAME) Затем, что хотелось не "так", а "быстро". ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2012, 15:48 |
|
SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT
|
|||
---|---|---|---|
#18+
softwarerSEQUENCE vs IDENTITYНафига такое счастье, когда можно так: [src PLSQL] INSERT INTO table (ID, NAME) VALUES(SEQ.NEXT_VAL, :NAME) Затем, что хотелось не "так", а "быстро". Если быстро то без сиквенса, если удобно то с кэшем сиквенса, а если "быстро", то с инкрементом 1000. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2012, 16:00 |
|
SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT
|
|||
---|---|---|---|
#18+
SEQUENCE vs IDENTITYЕсли быстро то без сиквенса Если быстро, то без инсёрта. Сиквенсы тут не при чём. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2012, 16:46 |
|
SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT
|
|||
---|---|---|---|
#18+
softwarerSEQUENCE vs IDENTITYА установить кэш не пробовали А смысл? Кэш регулирует быстродействие сервера, а целью в данном случае было избежать огромного количества тупых синхронных запросов к серверу "за айдишниками".Ну вообще-то немного не так... Если я правильно помню, то кеш как-раз говорит о том, что за одну синхронизацию "за id'ами" выберется вот тот 1К id'ов и больше синхронизироваться не надо будет (до тех пор, пока в текущей транзакции id'ы не закончатся. Так что кеш генератора в данном случае как-раз и должен был решить вашу проблему. Но это в теории. Как это на практике (кстати, что за СУБД, на M$-ли?) в вашей СУБД - не знаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2012, 03:26 |
|
SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT
|
|||
---|---|---|---|
#18+
Warstonesoftwarerпропущено... А смысл? Кэш регулирует быстродействие сервера, а целью в данном случае было избежать огромного количества тупых синхронных запросов к серверу "за айдишниками".Ну вообще-то немного не так... Если я правильно помню, то кеш как-раз говорит о том, что за одну синхронизацию "за id'ами" выберется вот тот 1К id'ов и больше синхронизироваться не надо будет (до тех пор, пока в текущей транзакции id'ы не закончатся. Так что кеш генератора в данном случае как-раз и должен был решить вашу проблему. Но это в теории. Как это на практике (кстати, что за СУБД, на M$-ли?) в вашей СУБД - не знаю. Вы все проспали. Речь шла о СУБД Oracle. Ни с кэшем ни без него никаких синхронных запросов за ID-шниками не будет. Откуда это взял softwarer непонятно. ID-шники беруться непосредственно при выполнении инсерта. Без кэша сиквенса будут постоянные межядерные пинги процессорного кэша, с кэшэм сиквенса они будут в 1000 раз реже. Вот в чем проблема, которую softwarer решил в ручную вместо простой комманды. Ну а вместо использования в ручную нелогируемых параметризованных инсертов с аппендом и группировкой по транзакциям, он использовал автоматизированный и равный по производительности direct load. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2012, 03:36 |
|
SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT
|
|||
---|---|---|---|
#18+
WarstoneЕсли я правильно помню, то кеш как-раз говорит о том, что за одну синхронизацию "за id'ами" выберется вот тот 1К id'ов и больше синхронизироваться не надо будет Не надо будет синхронизироваться внутри сервера для получения новых id. Эти id надо ещё доставить на клиента. Для чего выполнить либо тысячу запросов, либо запрос на тысячу значений. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2012, 18:30 |
|
|
start [/forum/topic.php?all=1&fid=35&tid=1552595]: |
0ms |
get settings: |
12ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
37ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
others: | 11ms |
total: | 159ms |
0 / 0 |