2013-05-21 4 views
2

Я пытаюсь получить представление об индексах и начал с статьи this msdn. Это говорит,Таблица без кластеризованных индексов

Когда таблица хранится в виде кучи, отдельные строки обозначаются ссылкой на идентификатор строки (RID), состоящий из номера файла, номер страницы данных и слот на странице.

Я понятия не имею, что они подразумевают под «номер файла, данных номер страницы, а также слот на странице»

Может кто-нибудь уточнить, пожалуйста?

+0

Я не могу ответить на ваш вопрос, но избегаю использования таблицы с кластеризованным индексом. Рассмотрим кластеризованный индекс, поскольку основной средний SQL-сервер должен правильно управлять вашей таблицей. – Serge

+1

Это все о внутренней работе SQL Server - увлекательной, но обычно не интересной для людей, которые просто хотят хранить свои данные и извлекать их. –

ответ

3

При использовании кластерного таблицы, индексные записи хранить кластерный ключ (логический идентификатор) записи таблицы.

Скажет, если вы используете кластерную основную таблицу, как это:

id name 
1 Jonh 
2 Alice 

и создать индекс name, индекс будет хранить эти данные:

name row_pointer 
Alice 2 
John 1 

Если таблица была куча , индекс будет хранить физические указатели на таблицу:

name row_pointer 
Alice <file C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\db.mdf, page 1234, slot 2> 
John <file C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\db.mdf, page 1234, slot 1> 

(это из курса se выглядит более компактным в своей бинарной форме)

Файл не требует пояснений, страница представляет собой блок 8K в файле, слот - номер записи на странице (запись TOC хранится в заголовке каждой страницы)

+1

Есть ли способ использовать этот «row_pointer» в выражении SQL (аналогично Oracle 'rowid', Postgres 'ctid' или DB2' rid_bit() ') –

+0

@a_horse_with_no_name: вы можете выбрать его (' %% physloc %% '), но не использовать в запросе (эффективно) – Quassnoi

1

Куча - это набор страниц данных. Страница - это наименьшая единица хранения данных в Microsoft SQL Server и содержит данные в строках. Строка может находиться только на одной странице.

Если вы хотите получить более подробную информацию о внутренних компонентах SQL Server, то, возможно, прочитайте Внутренние документы Microsoft® SQL Server® 2008 от Kalen Delaney. Я нашел ее книги полезными в прошлом.

MSDN article: Tables and Index Data Structures Architecture

+0

Столбцы типа 'nvarchar (max)', 'varbinary (max)', 'ntext' и т. Д. Могут охватывать несколько страниц. – Andomar

Смежные вопросы