C / C ++ является несдержанным с первых дней C ++, где они были намного более похожи, чем они были сегодня. Поначалу это не так уж и неправильно, но становится все больше и больше.
Базовая структура достаточно схожа, поэтому большинство простых вопросов все же работают между ними. На эту тему есть целая статья в Википедии: http://en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B
Самая большая ошибка, которая возникает из-за того, что кто-то хорошо разбираются в C, они будут одинаково хороши в C ++.
Я думаю, вы сбиваете с толку использование первичных ключей и ограничений (модель бизнес-домена ) с использованием индексов (производительность).
Внешний ключ может влиять на оптимизатор, и обычно для внешних ключей создается индекс.
В мире SQL Server первичный ключ часто путают с кластеризованным индексом, потому что чаще, чем суррогатный ключ (например, столбец идентификации с автоинкрементом), выбирается как первичный ключ и кластерный индекс.
Это статья может представлять интерес: DataSet и DataTable в ADO.NET 2.0 .
В ответ на ваш комментарий:
Используйте DataView для повторяющихся поисков непервичных ключей Если вы нужно многократно искать, используя данные непервичного ключа, создайте DataView с порядком сортировки. это создает индекс, который можно использовать для выполнить поиск. Это лучше всего подходит для повторяющихся поисков, потому что есть некоторые затраты на создание индекс.
Объект DataView предоставляет Find и FindRows, чтобы вы могли запрашивать данные в базовом Таблица данных. Если вы только выполняете один запрос, обработка, которая требуется для создания индекса уменьшает производительность, которая достигается используя index.
При создании объекта DataView используйте конструктор DataView, который принимает Sort, RowFilter и Значения RowStateFilter как конструктор аргументы вместе с лежащими в основе Таблица данных. Использование DataView конструктор гарантирует, что индекс построен один раз. Если вы создадите пустой DataView и установите Sort, RowFilter, или свойства RowStateFilter после этого индекс строится на как минимум два раза.
DataTable
реализованы с использованием B-деревьев (или некоторых его вариантов). Быстрый взгляд на Reflector показывает, что есть класс Index
плюс свойство LiveIndexes
в классе DataTable
, что подразумевает наличие некоторых индексов, но на самом деле я не знаю, где они.
Исходя из моего (действительно ограниченного) опыта: запросы на PK действительно быстрые.
Обычно ограничения замедляют работу. Но для выбора уникальное ограничение может ускорить процесс (но я могу найти ссылку на MS), также оно может быть ограничено в зависимости от выбора. Большинство ссылок, которые я нахожу, говорят об ограничениях, замедляющих работу.
Так что в вашем случае это может улучшить производительность.