Первая НФ - Все поля являются скалярными, не должно быть повторений
Вторая НФ - Все ключевые значения должны завесить от первичного ключа, т.е. набор ключевых значений должен быть уникальным
Третья НФ - Все ключевые и не ключевые значения должны завесить от первичного ключа
НФ Бойса-Кодда - Ключевые атрибуты составного ключа не должны зависеть от неключевых атрибутов
Четвертая НФ - В таблицах должны отсутствовать нетривиальные многозначные зависимости
Четвертая НФ - В таблицах должны отсутствовать нетривиальные многозначные зависимости
Пятая НФ - В таблице каждая нетривиальная зависимость соединения должна определяться потенциальным ключом этой таблицы.
Доменно-ключевая НФ - Каждое наложенное ограничение на таблицу должно являться логическим следствием ограничений доменов и ограничений ключей, которые накладываются на данную таблицу.
Шестая НФ - Таблица находится в 6NF, когда она неприводима, то есть не может быть подвергнута дальнейшей декомпозиции без потерь.

Это отхождение от правил нормализации бд, для повышения скорости доступа к данным. Например, в highload проектах.

Кластерный индекс, вид индекса хранящегося вместе с данными, поэтому возможен только один PK.
Обязательно уникальный, используется для ссылок.

Транзакция — это набор операций по работе с базой данных (БД), объединенных в одну атомарную пачку.
Команды для работы с транзакциями в MySQL: BEGIN, COMMIT, ROLLBACK.

Уровни изоляции транзакций:
- Read uncommitted - плохая согласованность, но большая скорость выполнения. Каждая транзакция видит незафиксированные изменения другой транзакции (грязное чтение).
- Read committed - видны только зафиксированные действия (неповторяющееся чтение (чтение UPDATE и DELETE) и чтение фантомов (чтение INSERT))
- Repeatable read - Уровень, позволяющий предотвратить феномен неповторяющегося чтения. Т.е. мы не видим в исполняющейся транзакции измененные и удаленные записи другой транзакцией. Но все еще видим вставленные записи из другой транзакции.
- Serializable - Уровень, при котором транзакции ведут себя как будто ничего более не существует, никакого влияния друг на друга нет. В классическом представлении этот уровень избавляет от эффекта чтения фантомов.
Самый медленный режим работы

Atomicity — Атомарность - Атомарность гарантирует, что каждая транзакция будет выполнена полностью или не будет выполнена совсем. Не допускаются промежуточные состояния.
Consistency — Согласованность - Благодаря тому, что транзакция не допускает промежуточных результатов, база остается консистентной. То есть до выполнения операции и после база остается консистентной
Isolation — Изолированность - Во время выполнения транзакции параллельные транзакции не должны оказывать влияния на её результат.
Durability — Надёжность - Если пользователь получил подтверждение от системы, что транзакция выполнена, он может быть уверен, что сделанные им изменения не будут отменены из-за какого-либо сбоя.

Объект базы данных, создаваемый с целью повышения производительности поиска данных.
B-tree - сбалансированное дерево, каждый элемент представляет собой скалярное значение которое ссылается на первичный ключ. Каждое плечо в дереве может иметь несколько потомков.
Сложность выборки log(N)
Hash индекс - строит хэш таблицу на основание хэш функции, поваляет осуществлять быстрые выборки. Чаще всего применяется для индексирования строчных или двоичных данных.
Сложность выборки линейная
Пространственные индексы - Пространственный индекс представляет собой тип расширенного индекса, позволяющий индексировать пространственные столбцы. Пространственный столбец представляет собой столбец таблицы, в котором содержатся данные пространственного типа, например geometry или geography.
Bitmap - В bitmap-структурах создается двухмерный массив со столбцом для каждой строки в индексируемой таблице. Каждый столбец представляет отдельное значение в bitmap-индексе. Этот двухмерный массив показывает каждое значение индекса, умноженное на количество строк в этой таблице.
Особое преимущество bitmap-индексирования проявляется, когда одна таблица включает несколько bitmap-индексов. Мощность каждого столбца может быть невысокой. Создание нескольких bitmap-индексов предоставляет очень сильный подход для быстрого ответа на сложные SQL-запросы.
Составной индекс - Составным называют индекс, который: может включать более одного (до 16) столбцов, выступающих ключевыми значениями.
Покрывающие индексы - Покрывающими индексами называются некластеризованные индексы, которые разрешают один или несколько схожих результатов запроса напрямую, без доступа к базовой таблице и без уточняющих запросов.

Механизм синхронизации содержимого нескольких копий объекта.
Master-master - репликация когда возможно писать сразу в несколько таблиц
Master-slave - репликация когда возможно читать сразу из несколько таблиц
Используется в основном slave репликация.
Назначение: повышение скорости или бэкап бд.
Slave хранят текущую позицию в мастер бд, после чего ходят в мастер и считывают из лога запросов отставшие от slave данные из мастера.

Партиционирование - это разбиение больших таблиц на логические части по выбранным критериям.
В MySQL ключевое слово PARTITION, указывает условия по какому принципу будет происходить партиционирование. Физически происходит разбивка на разные файлы по типа партиций и запись данных по правилам в них.

Шардирование - это разделение данных из одной бд в разные.
Существует два принципа шардирования:
  1. Шардирование по гео - т.е. мы разносим данные по серверам в зависимости от их геолокации
  2. Шардирование по типам данных - т.е. мы разносим данные по их связанности, например одна бд для товаров, другая для заказов
Шардирование реализуется некоторыми энтерпрайз решениями (например у Percona) или же на уровне кода.

Для поиска медленных запросов нужно пройти следующий процесс:
  1. Проверить код на наличие ошибок (например запросы в цикле)
  2. Вычислить запрос который выполняется медленно
  3. Првоерить запрос при помощи EXPLAIN
  4. Если возможно добавить необходимы индексы
  5. Если это не поможет применить репликацию или шардирование
EXPLAIN позволяет увидеть какие индексы использовались в запросе и как много строк было затронуто при выполнении запроса. Цель добавления индекса снижение кол-ва затронутых строк.