TGViewer
Smart Data Smart Data @smart_data_channel · 1.33K subscribers
Post #152 1.85K
Сегодня хочу рассказать про партиционирование и индексы в базах данных.

Партиционирование - это метод разделения одной большой таблицы (родительской) на много маленьких таблиц (партиций).
Разделение родительской таблицы происходит по заданному условию: например, у нас есть таблица с заказами, каждый заказ произошёл в определённую дату. Мы можем партиционировать эту таблицу по дате заказа.

Когда использовать:
- для более гибкого использования физического хранилища данных. Например, мы можем хранить отдельные партиции на разных серверах и для хранения редко запрашиваемых данных использовать более дешёвую технологию хранения на отдельном сервере;
- для гибкого управления данных в таблицах. Мы можем быстро добавлять и удалять данные на уровне партиций;
- для ускорения выполнения SQL-запросов к таблице. Партиционирование может существенно повысить скорость запросов, так как движок будет сканировать отдельные партиции, в которых лежат нужные для запроса данные, а не всю таблицу.
Вернёмся к нашему примеру с датой заказа: например, у нас есть таблица orders, и мы пишем запрос к ней, запрашивая только заказы за 2021-12-15:

SELECT * FROM orders WHERE order_date = '2021-12-15';


Так как наша таблица партиционирована по дате заказа, движок просканирует только одну партицию "2021-12-15", а не всю таблицу (в случае, если партиционирование не используется). Скорость выполнения такого запроса вырастет во много раз.

Когда не использовать: не нужно использовать партиционирование на небольших таблицах. Если говорить о традиционных реляционных СУБД, создание и поддержка партиций является не самой тривиальной задачей, и, если таблица небольшая, выгода от партиций будет намного меньше затрат на их создание и поддержку. Более того, на небольших таблицах партиционирование может даже снижать производительность запросов.
More from @smart_data_channel
  1. Mar 1, 2022На этом я закончу. Уже достаточно сказано. Если бы кто-то знал, насколько мне противно пис…
  2. Mar 1, 2022Надеюсь, эта война скоро закончится, и я перестану писать о политике и буду писать только…
  3. Mar 1, 2022Ребята, меня переполняют негативные эмоции. Я стараюсь из-за всех сил, чтобы мой негатив н…
  4. Feb 27, 2022Я никогда не любил политику, особо не вникал в неё и новости практически не смотрел. Я оче…
  5. Feb 20, 2022Жизненный цикл запросов и план выполнения запроса на примере PostgreSQL - Часть 1 Всем при…
  6. Dec 28, 2021Как я и ожидал, результаты опроса получились далеко неоднозначными. Около половины опрошен…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →