Как ограничения ADO.NET DataTable влияют на производительность?

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

Базовая структура достаточно схожа, поэтому большинство простых вопросов все же работают между ними. На эту тему есть целая статья в Википедии: http://en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B

Самая большая ошибка, которая возникает из-за того, что кто-то хорошо разбираются в C, они будут одинаково хороши в C ++.

7
задан Mitch Wheat 27 June 2009 в 16:20
поделиться

3 ответа

Я думаю, вы сбиваете с толку использование первичных ключей и ограничений (модель бизнес-домена ) с использованием индексов (производительность).

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

В мире SQL Server первичный ключ часто путают с кластеризованным индексом, потому что чаще, чем суррогатный ключ (например, столбец идентификации с автоинкрементом), выбирается как первичный ключ и кластерный индекс.

Это статья может представлять интерес: DataSet и DataTable в ADO.NET 2.0 .

В ответ на ваш комментарий:

Используйте DataView для повторяющихся поисков непервичных ключей Если вы нужно многократно искать, используя данные непервичного ключа, создайте DataView с порядком сортировки. это создает индекс, который можно использовать для выполнить поиск. Это лучше всего подходит для повторяющихся поисков, потому что есть некоторые затраты на создание индекс.

Объект DataView предоставляет Find и FindRows, чтобы вы могли запрашивать данные в базовом Таблица данных. Если вы только выполняете один запрос, обработка, которая требуется для создания индекса уменьшает производительность, которая достигается используя index.

При создании объекта DataView используйте конструктор DataView, который принимает Sort, RowFilter и Значения RowStateFilter как конструктор аргументы вместе с лежащими в основе Таблица данных. Использование DataView конструктор гарантирует, что индекс построен один раз. Если вы создадите пустой DataView и установите Sort, RowFilter, или свойства RowStateFilter после этого индекс строится на как минимум два раза.

4
ответ дан 7 December 2019 в 14:37
поделиться

DataTable реализованы с использованием B-деревьев (или некоторых его вариантов). Быстрый взгляд на Reflector показывает, что есть класс Index плюс свойство LiveIndexes в классе DataTable , что подразумевает наличие некоторых индексов, но на самом деле я не знаю, где они.

Исходя из моего (действительно ограниченного) опыта: запросы на PK действительно быстрые.

0
ответ дан 7 December 2019 в 14:37
поделиться

Обычно ограничения замедляют работу. Но для выбора уникальное ограничение может ускорить процесс (но я могу найти ссылку на MS), также оно может быть ограничено в зависимости от выбора. Большинство ссылок, которые я нахожу, говорят об ограничениях, замедляющих работу.

Так что в вашем случае это может улучшить производительность.

http://msdn.microsoft.com/en-us/library/49z48hxc.aspx

0
ответ дан 7 December 2019 в 14:37
поделиться
Другие вопросы по тегам:

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