Насколько эффективны базы данных? - PullRequest
7 голосов
/ 30 апреля 2010

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

Ответы [ 3 ]

9 голосов
/ 30 апреля 2010
8 голосов
/ 30 апреля 2010

Полный ответ - тема многочисленных книг и диссертаций; -)

Однако основной ответ заключается в том, что все современные СУБД имеют несколько функций: Во-первых, у них есть оптимизатор запросов, который очень эффективен. Это найти хороший (не всегда лучший) путь для ответа на предоставленный запрос. Конечно, это действительно может помочь сложным вопросам, а не простым.

Во-вторых, они хранят данные в структурированном формате, который легко найти. Данные без кластеризованного индекса называют кучей, и это, как правило, менее эффективно для поиска, но это все еще структурированные данные. Данные обычно имеют кластеризованный индекс, который логически упорядочивает данные. (Некоторые люди считают, что он физически упорядочивает данные. В этом есть доля правды, но это не совсем так. Ицик Бен Ган, среди других есть отличная статья, опровергающая это убеждение).

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

Это, конечно, грубое и ужасное упрощение. Если вы хотите получить глубокий уровень понимания, будьте готовы к получению докторской степени в области теории баз данных. Для понимания общего уровня, вы можете взглянуть на книги о внутренностях базы данных. В частности, для SQL Server внутренняя часть SQL Server 2008 содержит много информации по этой теме.

2 голосов
/ 30 апреля 2010

Мне очень нравится Это объяснение (включая графику;)

Это художественный вывод:

Заключение

Пример индекса http://mattfleming.com/files/images/example.gif

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...