Index
Index - структура которая используется чтобы ускорить процесс получения данных.
SELECT * FROM книги
WHERE название='Белая книга';
Мы получили данные за 0.103 секунд.
Это очень быстро, но если у нас в базе данных есть миллион книг, а не 73, то в этом случае запрос займет несколько секунд.
Мы можем индексировать столбец название таблицы книги, чтобы получить данные быстрее.
CREATE INDEX книги_название_индекс
ON книги (название);
Если индексы ускоряют можно ли индексировать все столбцы наших таблиц?
Создать индекс практически на каждый столбец возможно, но категорически не рекомендуется.
Индексирование столбцов требует много памяти, это увеличивает стоимость хранения и замедляет скорость измение данных (INSERT, UPDATE, DELETE).
Можно и создать индексы на конкретные данные:
CREATE INDEX последние_книги
ON книги(год)
WHERE год=2023;
Если у нас часто спрашивают книги которые были опубликованы в 2023 году, можно эти данные индексировать чтобы быстро их получать.
Транзации
Создайте эту таблицу
CREATE table счета (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
balance INT check(balance > 0)
);
INSERT INTO счета (name, balance)
VALUES
('erlan', 10),
('алия', 20),
('нурайым', 30);
Как выполнять несколько запросов одновременно?
Если Эрлан отправляет Алии 10 сомов, мы хотим немедленно вычесть 10 сомов со счета Эрлана и добавить 10 сомов на счет Алии.
BEGIN;
UPDATE счета
SET balance=balance-10
WHERE name='erlan';
UPDATE счета
SET balance=balance+10
WHERE name='алия';
COMMIT;
Теперь у Эрлана 0 сомов и у Алии 30 сомов.
Если опять выполним этот одновременный запрос, то мы получим ошибку. Как только мы начинаем транзакцию и пишем несколько SQL-запросов, если хотя бы один из них терпит неудачу, мы можем завершить транзакцию командой ROLLBACK (откат), чтобы вернуть все значения к их состоянию до начала транзакции.

Top comments (0)