Я читал в последнее время о том, как работает clustered index
и non-clustered index
. Мое понимание в простых терминах (поправьте меня, если ошибаюсь):Оптимизация запросов на основе кластеризованных и некластеризованных индексов в SQL?
Структура данных, поддерживает clustered
и non-clustered index
является B-Tree
Clustered Index
: физически сортирует данные, основанные на колонке (или ключ). вы можете получить только один номер clustered Index
за table
. Если во время создания таблицы не указывается index
, сервер SQL
автоматически создаст clustered Index
на primary key column
.
Q1: Поскольку данные физически сортируются по индексу, здесь не требуется дополнительное пространство. это верно? так что происходит, когда я бросаю индекс, который я создал?
Non-clustered Index
: В non-clustered indexes
дерево leaf-node
содержит значения столбцов и указатель (указатель строки) к фактической строке в базе данных. Здесь есть дополнительное пространство, необходимое для хранения этого non-clustered index table
физически на диске. Однако один из них не ограничен номером non-clustered Indexes.
Q2: Означает ли это, что запрос на некластеризованный индексный столбец не приведет к сортировке данных?
Q3: Существует дополнительный поиск, связанный здесь, чтобы найти фактические данные о строках с помощью указателя на листовом узле. Какая разница в производительности по сравнению с кластеризованным индексом?
Excercise:
рассмотрит Employee таблицы:
CREATE TABLE Employee
(
PersonID int PRIMARY KEY,
Name varchar(255),
age int,
salary int
);
Теперь я создал таблицу сотрудников (создаются кластерный индекс по умолчанию на сотруднике).
Два частых запроса на эту таблицу происходят только по столбцам возраста и зарплаты. Для простоты, позволяет предположить, что таблица не часто обновляется
, например:
select * from employee where age > XXX;
select * from employee where salary > XXXX and salary < YYYY;
Q4: что это лучший способ построения индексов, так что запросы на оба эти колонки имеют аналогичная производительность. Если у меня кластеризованный индекс по возрастным запросам по возрастному столбцу будет быстрее, а по столбцу зарплаты будет медленнее.
Q5: В соответствующей заметке я неоднократно видел, что индексы (как кластерные, так и некластеризованные) должны создаваться в столбце с уникальными ограничениями. почему это? что произойдет при неспособности сделать это?
спасибо Сообщения, которые я прочитал здесь:
http://msdn.microsoft.com/en-us/library/ms190457.aspx
What do Clustered and Non clustered index actually mean?
What are the differences between a clustered and a non-clustered index?
How does database indexing work?
Вы отметили этот вопрос [tag: mysql], но ваши вопросы подразумевают, что вы спрашиваете о Microsoft SQL Server. Что он? Оба продукта предоставляют кластерные и некластеризованные индексы, но внутренние детали могут немного отличаться. Можете ли вы прояснить и, если необходимо, изменить теги? –
@BillKarwin: Я не спрашиваю о сервере Microsoft SQl. Я хочу, чтобы это был общий вопрос. Интерактивная реализация индексов может различаться между mysql и Microsoft. но меня интересует концепция/идея того, как она работает. Я не уверен, какая часть вопроса указывает сервер Microsoft SQL, если это так, любезно отредактируйте его. Я новичок здесь, поэтому я мог бы бессознательно перефразировать терминологию. Благодаря! –