Индекс кластера
Индекс кластера означает указание базе данных хранить близкие значения, фактически близкие друг к другу на диске.Они могут однозначно идентифицировать строки в таблице SQL.Каждая таблица может иметь ровно один кластерный индекс.Индекс кластера может охватывать более одного столбца.По умолчанию столбец с первичным ключом уже имеет кластеризованный индекс.
dictionary
Сам словарь - таблица с кластеризованным индексом.Потому что все данные физически хранятся в алфавитном порядке.
Некластерная индексация
Некластерная индексация похожа на простую индексацию книги.Они просто используются для быстрого поиска данных.Не уверен, чтобы иметь уникальные данные.Некластеризованный индекс содержит некластеризованные индексные ключи, а каждый ключ содержит указатель расположения данных.Просто индекс содержания книги содержит ключ к теме или главе и местоположение страницы этого.
индекс содержания книги
Таблица содержания книги просто запоминает название содержимогои его расположение на странице.Не уверен, что данные уникальны.Поскольку один и тот же абзац, текстовая строка или слово могут быть размещены много раз.
Индексирование PostgreSQL
PostgreSQL автоматически создает индексы для PRIMARY KEY
и всех UNIQUE
ограничений таблицы.Войдите в базу данных в терминале PostgreSQL и введите \d table_name
.Все сохраненные индексы будут визуализированы.Если существует кластерный индекс, который также будет идентифицирован.
Создание таблицы
CREATE TABLE IF NOT EXISTS profile(
uid serial NOT NULL UNIQUE PRIMARY KEY,
username varchar(30) NOT NULL UNIQUE,
phone varchar(11) NOT NULL UNIQUE,
age smallint CHECK(age>12),
address text NULL
);
3 Индекс будет создан автоматически.Все эти индексы не кластеризованы
"profile_pkey" PRIMARY KEY, btree (uid)
"profile_phone_key" UNIQUE CONSTRAINT, btree (phone)
"profile_username_key" UNIQUE CONSTRAINT, btree (username)
Создайте наш собственный индекс с uid и именем пользователя
CREATE INDEX profile_index ON profile(uid, username);
Это на самом деле некластерный индекс.Теперь перейдите к кластерному индексу
Создание некластерного индекса для кластера
ALTER TABLE profile CLUSTER ON profile_index;
проверьте таблицу \d profile
.это будет выглядеть следующим образом
Table "public.profile"
Column | Type | Collation | Nullable | Default
----------+-----------------------+-----------+----------+--------------------------------------
uid | integer | | not null | nextval('profile_uid_seq'::regclass)
username | character varying(30) | | not null |
phone | character varying(11) | | not null |
age | smallint | | |
address | text | | |
Indexes:
"profile_pkey" PRIMARY KEY, btree (uid)
"profile_phone_key" UNIQUE CONSTRAINT, btree (phone)
"profile_username_key" UNIQUE CONSTRAINT, btree (username)
"profile_index" btree (uid, username) CLUSTER
Check constraints:
"profile_age_check" CHECK (age > 12)
Смотрите, profile_index теперь CLUSTER
Теперь, повторно кластеризуйте таблицу, чтобы таблица могла следовать роли индекса кластера
CLUSTER profile;