Таблицы без Первичного ключа

Не используйте ваш браузер для тестирования вашего API.

Вместо этого попробуйте использовать HTTP-клиент, который позволяет вам указать ваш запрос, такой как CURL или даже Fiddler.

Проблема с этой проблемой заключается в клиенте, а не в API. Веб-API ведет себя правильно, согласно запросу браузера.

41
задан Mark Harrison 19 August 2008 в 03:16
поделиться

6 ответов

При контакте с индексами необходимо определить то, для чего таблица будет используемой. Если Вы, прежде всего, вставляете 1 000 строк в секунду и не делаете какие-либо запросы, то кластерный индекс имеет успех к производительности. Если Вы сделаете 1 000 запросов в секунду, то не наличие индекса приведет к очень плохой производительности. Лучшая вещь сделать при попытке настроить запросы/индексы состоит в том, чтобы использовать План запросов Анализатор и SQL Profiler в SQL Server. Это покажет Вам, где Вы сталкиваетесь с дорогостоящими сканированиями таблицы или другими блокировщиками производительности.

Что касается GUID по сравнению с идентификационным аргументом, можно найти людей онлайн, которые клянутся обоими. Мне всегда преподавали использовать GUID, если у меня нет действительно серьезного основания не к. У Jeff есть хорошее сообщение, которое говорит о причинах использования GUID: https://blog.codinghorror.com/primary-keys-ids-versus-guids / .

Как с большинством что-либо связанная разработка, если Вы надеетесь улучшать производительность, нет один, единственный правильный ответ. Это действительно зависит от того, что Вы пытаетесь выполнить и как Вы реализуете решение. Единственный истинный ответ должен протестировать, протестировать и протестировать снова против метрик производительности, чтобы гарантировать, что Вы удовлетворяете своим целям.

[Редактирование] @Matt, после выполнения еще некоторого исследования в области GUID/идентификатора дебатируют, я столкнулся с этим сообщением. Как я упомянул прежде, нет истинного права, или неправильно ответьте. Это зависит от Ваших определенных потребностей реализации. Но это некоторые довольно допустимые причины использовать GUID в качестве первичного ключа:

, Например, существует проблема, известная как "горячая точка", где определенные страницы данных в таблице находятся под относительно высокой конкуренцией валюты. В основном, что происходит, большая часть трафика в таблице (и следовательно блокировки уровня страницы) происходит на небольшой площади таблицы, к концу. Новые записи будут всегда переходить к этой горячей точке, потому что ИДЕНТИФИКАЦИОННЫЕ ДАННЫЕ являются генератором порядкового номера. Эти вставки неприятны, потому что они требуют, чтобы страница Exlusive соединила страницу, они добавляются к (горячая точка). Это эффективно сериализирует всех, вставляет в таблицу благодаря механизму фиксации страницы. NewID (), с другой стороны, не страдает от горячих точек. Значения генерировали использование NewID (), функция только последовательна для кратковременных вспышек вставок (где функция вызывается очень быстро, такой как во время многострочной вставки), который заставляет вставленные строки распространяться случайным образом всюду по страницам данных таблицы вместо всех в конце - таким образом устранение горячей точки от вставок.

кроме того, потому что вставки случайным образом распределяются, шанс расщеплений страницы значительно уменьшается. В то время как расщепление страницы тут и там не слишком плохо, эффекты действительно складывают быстро. С ИДЕНТИФИКАЦИОННЫМИ ДАННЫМИ страница Fill Factor довольно бесполезна как настраивающийся механизм и могла бы также быть установлена на 100% - строки никогда не будут вставляться ни в какую страницу, но последнюю. С NewID (), можно на самом деле использовать Коэффициент заполнения как включающий производительность инструмент. Можно установить Коэффициент заполнения на уровень, который приближается, предполагаемый рост объема между индексом восстанавливает, и затем запланируйте восстанавливание в течение часов неполной нагрузки с помощью dbcc переиндекс. Это эффективно задерживает хиты производительности расщеплений страницы до непиковых времен.

, Если Вы даже думаете , Вы, возможно, должны были бы включить репликацию для рассматриваемой таблицы - тогда Вы могли бы также сделать PK uniqueidentifier и отметить поле гуида как ROWGUIDCOL. Репликация потребует исключительно ценного поля гуида с этим атрибутом, и это добавит тот, если ни один не будет существовать. Если подходящее поле будет существовать, то оно будет просто использовать тот, который это там.

еще одно огромное преимущество для использования GUID для PKs является тем, что значение действительно гарантируется уникальное - не только среди всех значений, сгенерированных этот сервер, но все значения, сгенерированные весь компьютеры - ли это быть Вашим сервером дб, веб-сервером, сервером приложений или клиентской машиной. В значительной степени каждый современный язык имеет возможность генерации допустимого гуида теперь - в.NET, можно использовать Систему. Гуид. NewGuid. Это ОЧЕНЬ удобно при контакте с кэшируемыми наборами данных основной детали в частности. Вы не должны использовать сумасшедшие временные схемы манипулирования только для связи записей вместе, прежде чем они будут фиксироваться. Вы просто выбираете совершенно допустимый новый Гуид от операционной системы для постоянного значения ключа каждой новой записи в то время, когда запись создается.

http://forums.asp.net/t/264350.aspx

33
ответ дан Cœur 4 August 2019 в 21:51
поделиться

Первичный ключ служит трем целям:

  • указывает, что столбец (столбцы) должен быть уникален
  • , указывает, что столбец (столбцы) должен быть непустой
  • , документируют намерение, что это - уникальный идентификатор строки

, первые два могут быть определены большим количеством способов, поскольку Вы уже сделали.

третья причина хороша:

  • для людей, таким образом, они могут легко видеть Ваше намерение
  • для компьютера, таким образом, программа, которая могла бы сравнить или иначе обработать Вашу таблицу, может запросить базу данных для первичного ключа таблицы.

первичный ключ А не должен быть числовым полем автопостепенного увеличения, таким образом, я сказал бы, что это - хорошая идея определить Ваш столбец гуида как первичный ключ.

7
ответ дан Mark Harrison 4 August 2019 в 21:51
поделиться

Я также всегда слышал, что наличие интервала автопостепенного увеличения хорошо для производительности, даже если Вы на самом деле не используете его.

0
ответ дан Kevin Sheffield 4 August 2019 в 21:51
поделиться

Первичный ключ не должен быть полем автопостепенного увеличения, во многих случаях это просто означает усложнение структуры таблицы.

Вместо этого Первичный ключ должен быть минимальным набором атрибутов (обратите внимание, что большая часть DBMS позволит составной первичный ключ), который однозначно определяет кортеж.

В технических терминах, это должно быть поле, от которого любое поле в кортеже полностью функционально зависит. (Если это не Вы, возможно, должен был бы нормализовать).

На практике, проблемы производительности могут означать, что Вы объединяете таблицы и используете поле постепенного увеличения, но я, кажется, вспоминаю что-то о преждевременной оптимизации, являющейся злым...

0
ответ дан Matthew Schinckel 4 August 2019 в 21:51
поделиться

Просто вмешиваюсь, потому что Мэтт меня немного приманил.

Вы должны понимать, что, хотя кластерный индекс по умолчанию ставится на первичный ключ таблицы, эти две концепции являются отдельными и должны рассматриваться отдельно. CIX указывает способ, которым данные хранятся и на которые ссылаются NCIX, тогда как PK обеспечивает уникальность для каждой строки, чтобы удовлетворить ЛОГИЧЕСКИЕ требования таблицы.

Таблица без CIX - это просто куча. Таблица без ПК часто считается «не таблицей». Лучше всего понимать концепции PK и CIX по отдельности, чтобы вы могли принимать разумные решения при проектировании базы данных.

Роб

7
ответ дан 27 November 2019 в 00:52
поделиться

На данный момент никто не ответил вопрос: каковы плюсы / минусы таблицы без PK ИЛИ КЛАСТЕРИРОВАННОГО индекса. На мой взгляд, если вы оптимизируете для более быстрых вставок (особенно инкрементную массовую вставку, например, когда вы массово загружаете данные в не- пустая таблица), такая таблица: без кластерного индекса, без ограничений, без внешних ключей, без значений по умолчанию и без первичного ключа в базе данных с простой моделью восстановления является лучшей. Теперь, если вы когда-нибудь захотите запросить эту таблицу (а не сканировать ее полностью), вы можете добавить некластеризованные неуникальные индексы по мере необходимости, но сведите их к минимуму.

3
ответ дан 27 November 2019 в 00:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: