Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Вариации на тему "Identity"
|
|||
|---|---|---|---|
|
#18+
Слышал от умных людей, что существует два принципиально разных подхода к определению идентити: синтетический идентити и натуральный. Первый - предлагаемые средствами Microsoft-a, второй - уникальный код типа Name+ID+... Кто-нибудь знает, о чем идет речь? Просветите чайника, пожалуйста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2002, 09:06 |
|
||
|
Вариации на тему "Identity"
|
|||
|---|---|---|---|
|
#18+
Вы путаете identity с первичным ключом. Проектировщики баз данных до сих пор спорят какой подход выбора PK лучше, использовать ли только естественный ключ или можно использовать суррогатный. Противники суррогатного ключа считают, что проектировщики которые его используют таким образом прячут свои ошибки в выборе РК. Я бы посоветовал Вам почитать кого нибудь из классиков по этой теме. Если я ничего не путаю то Дэйт за использование суррогатных ключей. Лично я использую суррогатный ключ, но при этом выделяю естественный и объявляю его АК. P.S. Суррогатный ключ не обязательно является identity. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2002, 09:46 |
|
||
|
Вариации на тему "Identity"
|
|||
|---|---|---|---|
|
#18+
Добавлю к предыдущему, что естественный ключ обычно определяется на этапе логического проектирования и затем отображается в физическую модель данных. Суррогатный ключ создаётся в двух случаях 1) Невозможно определить уникальный естественный ключ 2) Уникальный естественный ключ существует, но для целей ускорения доступа к данным удобнее использовать суррогатный ключ. Обычно это бывает в тех случаях, когда размер естественного ключа слишком велик и(или) он включает в себя множество элементов данных. Например, типичными суррогатными ключами являются "серия и номер паспорта", "ИНН" и т.п. Разумеется, МВД могло бы идентифицировать человека можно идентифицировать с помощью его естественный признаков, например "Фамилия, Имя, Отчество, Дата рождения, Место рождения". Но очевидно, что естественный ключ слишком громоздкий и удобнее использовать более короткий искусственно созданный идентификатор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2002, 11:44 |
|
||
|
Вариации на тему "Identity"
|
|||
|---|---|---|---|
|
#18+
В догонку хотел бы добавить, что естественный ключ имеет тенденцию изменятся (например человек сменил фамилию), что с точки зрения проектирования БД не есть хорошо. Во многих случаях приходится еще хранить историю изменения, так что наверное искусственный ключ лучше во всех отношениях, кроме одного момента - если требуется собирать общую БД с удаденных БД. Тут уже без естественных ключей не обойтись, хотя для таких целей лучше задействовать искусственные ключи как PK и естественные как AK. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2002, 12:14 |
|
||
|
Вариации на тему "Identity"
|
|||
|---|---|---|---|
|
#18+
Большое спасибо за ответы и за поправку - конечно, не Identity, а Primary Key. Sorry, это все от избытка холестерина в голове Дело было заведено вот по какому поводу. Я все время использовал суррогатный ключ с помощью идентити. Тут все понятно. Но недавно пришлось столкнуться с чужой базой, где ключ натуральный, и, как вы говорили, "громоздкий". Только вот почему-то этот громоздкий ключ не был кластерным. По-моему, это должно жутко все тормозить. Но забава в том, что база от професииональной software-ной конторы, и сомневаюсь, что это просто просчет. Может, здесь где-то особый прикол? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2002, 13:47 |
|
||
|
Вариации на тему "Identity"
|
|||
|---|---|---|---|
|
#18+
По-моему, это должно жутко все тормозить При SELECT - да, при INSERT - возможно и нет. Представьте себе добавление/обновлении записи, которое из-за кластерного индекса по натуральному ключу(скажем на основе той же фамилии) должно попасть в середину таблицы. Представили сколько будет "стоить" такое добавление(и обновление тоже)? А вот с суррогатным ключом на основе того же identity картина будет совершенно другая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2002, 14:16 |
|
||
|
Вариации на тему "Identity"
|
|||
|---|---|---|---|
|
#18+
>Но забава в том, что база от професииональной software-ной конторы Абсолютно ни о чем не говорит конторы они разные бывают ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2002, 14:58 |
|
||
|
Вариации на тему "Identity"
|
|||
|---|---|---|---|
|
#18+
Меня удивляет то, что все таблицы(и довольно немалые таблицы) в этой попавшейся мне базе были построены на большом количестве некластерных индексов. Насколько я знаю SQL, при наличии основного кластерного индекса, все остальные строятся как бы поверх его, что достаточно струтуризирует дерево. Если такого первичного кластерного индекса нет, то и остальные работают менее эффективно. Насколько выгодно использовать в больших таблицах естественные некластерные индексы, или лучше завести один кластерный с помощью неприхотливого identity и больше никогда его не трогать? Бог с ним - с обобщением данных из разных таблиц. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2002, 15:12 |
|
||
|
Вариации на тему "Identity"
|
|||
|---|---|---|---|
|
#18+
IMHO слово "выгодно" всегда нужно употреблять с "для чего". Поскольку "выгодно для всего" - это из области мечты. А сначала можно определиться, что за истема будет OLTP или OLAP. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2002, 15:20 |
|
||
|
Вариации на тему "Identity"
|
|||
|---|---|---|---|
|
#18+
>Насколько я знаю SQL, при наличии основного кластерного индекса, все остальные строятся как бы поверх его, что достаточно струтуризирует дерево. Неправильно знаете кластерный индекс может быть, а может и не быть и он никак не связан с некластерным, а вот когда какой удобно использовать почитайте в BOL, а то описывать много придется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2002, 15:44 |
|
||
|
Вариации на тему "Identity"
|
|||
|---|---|---|---|
|
#18+
Я имел в виду вот это отличие: Nonclustered indexes can be defined on either a table with a clustered index or a heap. In Microsoft® SQL Server™ version 7.0, the row locators in nonclustered index rows have two forms: If the table is a heap (does not have a clustered index), the row locator is a pointer to the row. The pointer is built from the file ID, page number, and number of the row on the page. The entire pointer is known as a Row ID. If the table does have a clustered index, the row locator is the clustered index key for the row. If the clustered index is not a unique index, SQL Server 7.0 adds an internal value to duplicate keys to make them unique. This value is not visible to users; it is used to make the key unique for use in nonclustered indexes. SQL Server retrieves the data row by searching the clustered index using the clustered index key stored in the leaf row of the nonclustered index. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2002, 16:04 |
|
||
|
Вариации на тему "Identity"
|
|||
|---|---|---|---|
|
#18+
2 Glory Речь идет об OLTP. Тяжелая такая бухгалтерия с множеством записей в таблицах. Соответственно, Insert & Update работают постоянно. Что для нее посоветуете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2002, 16:12 |
|
||
|
Вариации на тему "Identity"
|
|||
|---|---|---|---|
|
#18+
2 Bootmaker Не думаю что это существенное отличие, всего лишь по разному строятся указатели, сути это не меняет. Кластерный индекс - листьями являются записи, некластерный - листьями являются указатели. Кластерный выгоднее когда нужно по критерию получить запись, некластерный будет очень быстрым, когда нужно выбирать значения только тех полей, которые указаны в where. И как здесь уже замучались советовать, сомневаешься - собери типовые запросы и скорми их ITW. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2002, 08:04 |
|
||
|
Вариации на тему "Identity"
|
|||
|---|---|---|---|
|
#18+
Это программный продукт какой-то, как он полностью называется и от какой фирмы ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2002, 10:15 |
|
||
|
Вариации на тему "Identity"
|
|||
|---|---|---|---|
|
#18+
Не берите в голову. Я знаю людей, которые не первый год работают с SQL Server-ом и вообще не знают, что такое кластерный индекс. И всегда создают некластерные. Всё нормально работает. Зато знаю проблемы, которые возникали у слишком "умных" разработчиков, которые не по делу использоватил кластерные индексы и получали из-за снижение производителности при операциях INSERT и UPDATE. Создавая некластерный индекс, разработчик в отдельных случаях рискует дисковым пространством в БД и незначительным замедлением поиска (по сравнению с кластерным) при извлечении строк из таблицы по этому некластерному индексу. Создавая кластерный индекс, разработчик рискует потерять производительность при модификации значений в столбцах, относящихся к кластерному индексу. Так что для каждой конкретной таблицы нужно выбирать наименьшее зло. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2002, 10:36 |
|
||
|
Вариации на тему "Identity"
|
|||
|---|---|---|---|
|
#18+
>И всегда создают некластерные. Скорее всего это они так думали, на РК кластерный индекс создается по умолчанию если не указать обратное ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2002, 11:41 |
|
||
|
Вариации на тему "Identity"
|
|||
|---|---|---|---|
|
#18+
Господа, эта тема неисчерпаема. Здесь нету четкого и однозначного ответа. Если бы он был, то споры не возникали бы вновь и вновь на протяжении лет. Ссылка по теме, достаточно информативная: http://www.akzhan.midi.ru/devcorner/articles/NaturalKeysVersusAtrificialKeysByTentser.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2002, 13:49 |
|
||
|
Вариации на тему "Identity"
|
|||
|---|---|---|---|
|
#18+
Спасибо за вашу помощь. Так что же, все-таки такое - ITW? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2002, 13:54 |
|
||
|
Вариации на тему "Identity"
|
|||
|---|---|---|---|
|
#18+
Скажите все-таки, умные люди, зависит ли эффективность некластерного индекса от наличия кластерного индекса по колонке identity? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2002, 15:44 |
|
||
|
Вариации на тему "Identity"
|
|||
|---|---|---|---|
|
#18+
>...на РК кластерный индекс создается по умолчанию если не указать обратное В SQL2000 - да. В 7.0 по умолчанию именно некластерный. Как я пониаю, продукт наклепан именно на версии 7.0 (на 2000 просто еще мало кто чего успел). >Так что же, все-таки такое - ITW? Index tuning wizard >зависит эффективность некластерного индекса от наличия кластерного индекса по колонке identity. Ну вот, то identity, то pk, то снова identity... Ранее вы, уважаемый, говорили, что "где ключ натуральный, и, как вы говорили, "громоздкий"". Подозреваю, что это все-таки не identity, а pk. Так вот, если ключ действительно громоздкий, то лучше его кластерным не делать. И вообще первичным ключом лучше не делать. Ибо в этом случае на ваш вопрос можно ответить - да, зависит - чем он кластернее, тем хужее... Если он легкий (identity, например), то ответ на вопрос прямо противоположный. Опять же не во всех случаях. Могут быть ситуации, когда pk (и identity иже с ним) вообще не нужен. Ну просто некому него него ссылаться. В этом случае его наличие приводит к совершенно никчемному увеличению размера записи. А если он кластерный, то к замедлению операции добавления/модификации записей. Одним словом, все неоднозначно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2002, 19:17 |
|
||
|
Вариации на тему "Identity"
|
|||
|---|---|---|---|
|
#18+
2 Garya > В 7.0 по умолчанию именно некластерный А как же тогда понимать BOL 7.0 Creating and Modifying PRIMARY KEY Constraints ... SQL Server automatically creates a unique index to enforce the uniqueness requirement of the PRIMARY KEY constraint. If a clustered index does not already exist on the table, or a nonclustered index is not explicitly specified, a unique, clustered index is created to enforce the PRIMARY KEY constraint. ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2002, 10:31 |
|
||
|
Вариации на тему "Identity"
|
|||
|---|---|---|---|
|
#18+
Приношу извинения. Видимо, я не совсем правильно понял смысл сказанного и не совсем в ту степь высказался. Я имел в виду работу по созданию таблиц в EM 7.0. При установки в свойствах поля флажка индексирования clustered становится доступным, но по умолчанию сброшен. Такая же история, если щелкныть в панели инструментов на значке ключего поля и посмотреть, какой индекс у него образовался. Выясняется, что некластерный. Кластерность приходилось ручками прикручивать. В 2000 в EM кластерность по полю PK проставляется автоматом по умолчанию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2002, 18:33 |
|
||
|
Вариации на тему "Identity"
|
|||
|---|---|---|---|
|
#18+
Зато знаю проблемы, которые возникали у слишком "умных" разработчиков, которые не по делу использоватил кластерные индексы и получали из-за снижение производителности при операциях INSERT и UPDATE. Создавая некластерный индекс, разработчик в отдельных случаях рискует дисковым пространством в БД и незначительным замедлением поиска (по сравнению с кластерным) при извлечении строк из таблицы по этому некластерному индексу. 2 Oleg F Я не согласен с тем, что некластерный индекс всегда медленне кластерного, в некоторых случаях он работает быстрее когда в запросе перечислены поля (имею ввиду то что перечисленно в Select,Where,group by), которые имеются в некластерном индексе. То в этом случае серверу не приходится читать страницы с данными а использует информацию последних страниц индекса. В результате получается аналог кластерного. Вот на примере у меня была громоздкая таблица, в которой было 50 млн. записей. (КодСлучая,КодМедуслуги,Стоимость,Количество) медуслуги оказанные пациенту в случае определямом КодСлучая. Когда я собрался оптимизировать запрос у меня был всего один некластерный индекс по полю КодСлучая, ну я решил проверить что же посоветует Index Tuning Wizard и он мне посоветовал создать некластерный по 4 полям, я сперва не понял, но сделал и производидельность резко возросла. Затем когда прочел статью о том как устроены кластреные индексы и некластерные и что в некоторых случаях некластерный индекс работает аналогично кластерному я решил создать кластерный по полю КодСлучая дабы сэкономить 1,5-2 Гига. Место действительно сэкономил, но производительность на выборках упала на 10% . В результате я отказался от кластерного, лучше потратить лишних 2 Гига, и выиграть как в Select так и при Insert. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2002, 06:05 |
|
||
|
Вариации на тему "Identity"
|
|||
|---|---|---|---|
|
#18+
To Алексей. Я не совсем понял Ваш пример. Последнее описываемое создание - кластерный индекс по полю КодСлучая. Это в дополнение к уже имеющемуся некластерному по 4 полям? И после этого этот некластерный стал меньше? А выборка по 4 полям этого некластерного индекса замедлилась? Если это так, то мне непонятно, как так может быть - поиск и выборка значений из индекса, физический размер индекса меньше, а выполнение медленнее. Вам не кажется, что это нонсенс какой-то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2002, 06:58 |
|
||
|
Вариации на тему "Identity"
|
|||
|---|---|---|---|
|
#18+
2 Владимир Смирнов >> Я не совсем понял Ваш пример... И после этого этот некластерный стал меньше? Судя по контексту примера (хоть явно это и не указано) - составной индекс был дропнут, а вместо него - создан кластерный по полю 1-нственного критерия выборки. Из-за того и экономия в 1.5-2 Гига . >> как так может быть - поиск и выборка значений из индекса, физический размер индекса меньше, а выполнение медленнее... Ну да, в индексе остались только данные по полю критерия ( КодСлучая ), остальные данные для выборки - приходится считывать по ссылке из страниц данных, потому и замедлилась выборка, т.к. в некластерном составном индексе - все нужные поля уже лежали рядом с полем критерия... ИМХО, потеря 10%-ов производительности для такого случая - вполне нормальная "цена" за 2 Гига экономии места. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2002, 07:32 |
|
||
|
Вариации на тему "Identity"
|
|||
|---|---|---|---|
|
#18+
qu-qu правильно меня понял. Прошу прощения за то что не написал, что некластерный по 4 полям был удален и взамен был создан кластерный по одному полю КодСлучая. Поэтому и вышла экономия места, но производительность упала на 10%. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2002, 08:06 |
|
||
|
Вариации на тему "Identity"
|
|||
|---|---|---|---|
|
#18+
Ну в этом случае падение производительности вполне закономерно и объяснимо. Но тогда некорректно сравнение этих двух вариантов: некластерный по 4 полям и кластерный по одному полю, если выборка по 4 полям первого индекса. А Вы не пробовали вариант с обоими индексами одновременно. Как в отношении объёмов, так и в отношении производительности? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2002, 09:04 |
|
||
|
Вариации на тему "Identity"
|
|||
|---|---|---|---|
|
#18+
Не я непробовал. Просто долго создавать такие индексы на таблице в 50 млн. записей. Да и на такой машине с 192 метрами оперативки и с одним IDEшным винтом. Но как мне кажется, может я и ошибаюсь, но процессор запросов даже при наличии двух индексов кластерного по одному полю и некластерного по 4 полям будет использовать в запросе некластерный индекс. Ведь не просто так Index Tuning Wizard посоветовал для оптимизации сделать именно некластерный по 4 полям, а не кластерный по одному полю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2002, 12:04 |
|
||
|
Вариации на тему "Identity"
|
|||
|---|---|---|---|
|
#18+
2 Владимир Смирнов. Я боюсь что первый раз неправильно вас понял по поводу Вы не пробовали вариант с обоими индексами одновременно. Как в отношении объёмов, так и в отношении производительности? Что вы хотели этим сказать? создать индекс кластерный по 4 полям проверить запрос, а затем некластерный по 4 полям и сравнить оба результата в Как в отношении объёмов, так и в отношении производительности? Так я не пробовал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2002, 12:23 |
|
||
|
Вариации на тему "Identity"
|
|||
|---|---|---|---|
|
#18+
То Алексей Я имел в виду следующее: создать кластерный индекс для одного поля "КодСлучая" - точнее кластерный PK. Плюс к этому создать некластерный индекс для 4 полей, по которым делается выборка. Так как тип поля "КодСлучая" видимо int, то некластерный индекс станет меньше, а производительность на этих выборках - та-же. Ну а кластерный PK для поля типа int вообще практически не увеличит размер таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2002, 13:37 |
|
||
|
|

start [/forum/topic.php?all=1&fid=46&tid=1823476]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
57ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
| others: | 239ms |
| total: | 401ms |

| 0 / 0 |
