Базовые знания индекса
При обычной доставке внешних проектов мы часто делаем некоторые POC для быстрой разработки связанных веб-приложений. Каждый раз, когда мы разрабатываем структуру библиотечной таблицы, мы будем рассматривать использование индексов. Индекс используется правильно, что является качественным улучшением для опыт запроса. Ниже приводится сводка индекса. Некоторые точки оптимизации в сочетании с некоторыми простыми случаями (некоторые архивы, изученные ранее), делают общий доступ
Преимущества индексации
- Значительно уменьшить объем данных, которые сервер должен сканировать
- Помогите серверу избежать сортировки и временных таблиц
- Превратите случайный io в последовательный io
Полезность индекса
- Быстро находите строки, соответствующие предложению where
- Исключите строки из рассмотрения, если вы можете выбирать между несколькими индексами, mysql обычно использует индекс, который находит наименьшее количество строк
- Если таблица имеет многостолбцовый индекс, оптимизатор может использовать любой крайний левый суффикс индекса, чтобы найти строку.
- Когда есть ссылка на таблицу, получить данные строки из других таблиц
- Найдите минимальное или максимальное значение определенного столбца индекса
- Если сортировка или группировка выполняется по крайнему левому префиксу доступного индекса, то таблица сортируется и группируется.
- В некоторых случаях запрос можно оптимизировать для получения значения без запроса строки данных.
Индексная классификация
- Индекс первичного ключа: называется первичным ключом, исходным является ПЕРВИЧНЫЙ КЛЮЧ, состоящий из одного или нескольких столбцов, используемых для однозначной идентификации записи в таблице данных. Таблица не может иметь первичного ключа, но может быть не более одного первичного ключа, а значение первичного ключа не может содержать NULL.
- Уникальный индекс: убедитесь, что никакие две строки данных в таблице не имеют абсолютно одинакового значения ключа, чтобы помочь сохранить целостность данных.
- Обычный индекс: самый простой индекс без каких-либо ограничений - это индекс, который мы часто используем.
- Полнотекстовый индекс: Полнотекстовый индекс (FULLTEXT) может применяться только к таблице данных механизма MyISAM, но после mysql5.7 innodb также поддерживает его, который действует на столбцы с типами данных CHAR, VARCHAR и TEXT.
- Комбинированный индекс: используйте несколько столбцов в качестве одного индекса для поиска по принципу крайнего левого соответствия.
Структура данных, используемая индексом
- Хеш-таблица
- B + tree
Эта часть последующей деятельности будет отдельной статьей, которой мы расскажем.
Метод сопоставления индексов
Выполните следующий оператор создания таблицы:
create table staffs(
id int primary key auto_increment,
name varchar(24) not null default '' comment '姓名',
age int not null default 0 comment '年龄',
pos varchar(20) not null default '' comment '职位',
add_time timestamp not null default current_timestamp comment '入职时间'
) charset utf8 comment '员工记录表';
-----------
alter table staffs add index idx_nap(name, age, pos);
- Сопоставление полного значения: сопоставление полного значения относится к сопоставлению со всеми столбцами в индексе, например
explain select * from staffs where name = 'July' and age = '23' and pos = 'dev';
- Сопоставить крайний левый префикс: сопоставить только первые несколько столбцов, например:
explain select * from staffs where name = 'July' and age = '23'; explain select * from staffs where name = 'July';
- Префикс столбца сопоставления: вы можете сопоставить, например, начало значения столбца;
explain select * from staffs where name like 'J%';explain select * from staffs where name like '%y';
- Значение диапазона соответствия: вы можете найти данные в определенном диапазоне,
explain select * from staffs where name > 'Mary';
- Точно соответствовать одному столбцу, а диапазон - другому столбцу: вы можете запросить весь первый столбец и часть второго столбца, например
explain select * from staffs where name = 'July' and age > 25;
- Запрос, который обращается только к индексу: при запросе вам нужно только получить доступ к индексу, без доступа к строке данных, которая по сути является покрывающим индексом, например:
explain select name,age,pos from staffs where name = 'July' and age = 25 and pos = 'dev';