У меня есть ряд вопросов о ключах, указателях и ограничениях в SQL, SQL 2005 в частности. Я работаю с SQL около 4 лет, но я никогда не получал окончательных ответов на эту тему, и всегда есть противоречивая информация о сообщениях в блогах и т. Д. Большинство таблиц времени, которые я создаю и использую, имеют столбец Identity, который является Первичным ключом, а другие таблицы указывают на него через внешний ключ.SQL 2005: Ключи, индексы и ограничения Вопросы
С таблицами соединений у меня нет идентификатора и создается составной первичный ключ по столбцам внешнего ключа. Ниже приведен набор утверждений моих текущих убеждений, которые могут быть неправильными, пожалуйста, исправьте меня, если да, и другие вопросы.
Так вот:
Как я понимаю разницу между кластерным и не кластерным индексом (независимо от того, является ли оно уникально или нет) является то, что индекс кластерного влияет на физический порядок данных в таблице (следовательно, вы можете иметь только один в таблице), тогда как Non Clustered Index строит структуру данных дерева. При создании индексов почему я должен заботиться о Clustered vs Non Clustered? Когда следует использовать один или другой? Мне сказали, что вставка и удаление медленны с некластеризованными индексами, так как дерево нужно «перестроить». Я полагаю, что кластерные индексы не влияют на производительность таким образом?
Я вижу, что Первичные ключи на самом деле просто кластерные индексы, которые уникальны (их нужно кластеризовать?). Что особенного в отношении Первичного ключа и кластерного уникального индекса?
Я также видел Ограничения, но я никогда не использовал их и не смотрел на них. Мне сказали, что целью Constraints является то, что они предназначены для обеспечения целостности данных, тогда как индексы нацелены на производительность. Я также прочитал, что ограничения в любом случае реализуются как индексы, так что они «одинаковы». Это не звучит правильно для меня. Как ограничения отличаются от индексов?