и посмотреть медиа
Data analysis - DA SQL
и посмотреть медиа
Data analysis: SQL, Python.
Data analysis: SQL, Python.
AI bot for text-to-speech and voice cloning in Telegram. Create audio using neural network quickly and easily.
About data analysis: databases, SQL, Python and more for analysts.
Партиционирование в SQL Для начала, что такое партиционирование? Партиционирование – это разделение одной (часто большой) таблицы на разные части, которые сохраняются отдельно. При этом, с точки зрения логики, все эти части являются составными для "главной" таблицы. Например, есть у нас таблица с транзакциями с 2020 по 2025 год. Такую таблицу можно разбить на 6 разных частей: по одной за каждый год + одну за нынешний 2025. 🟠Зачем это нужно? ▶️Во-первых, ради производительности. Бывают ситуации, когда нам нужно узнать, какие были транзакции, условно, в 2022 году. И чтобы не нагружать запрос построчным чтением из огромной таблицы, можно обратиться к ее части в 5 раз меньшей по объему. ▶️Во-вторых, ради управления/организации данных. Из примера очевидно, что 2020-2024 года - архивные. Значит, всю текущую информацию мы будем складывать уже в секцию с 2025 годом. Также можно работать с архивными данными без опаски "навредить" текущим, и наоборот. ▶️В-третьих, можно вообще хранить эти части на разных серверах, тем самым более эффективно используя ресурсы. 🟠Какое партиционирование бывает и как оно пишется на SQL? Партиционирование делится на 2 большие категории: горизонтальное и вертикальное. ✅ГОРИЗОНТАЛЬНОЕ ПАРТИЦИОНИРОВАНИЕ Данные разделяются по строкам. Пример выше как раз относится к горизонтальному партиционированию, когда данные могут быть разделены по дате. Горизонтальное партиционирование бывает: ▶️По диапазону (Range). Данные разделяются на основе диапазона значений в определенном столбце. CREATE TABLE users ( user_id INT, name VARCHAR(100), age INT, email VARCHAR(100) ) PARTITION BY RANGE (age) ( PARTITION p0 VALUES LESS THAN (18), -- младше 18 лет PARTITION p1 VALUES LESS THAN (30), -- от 18 до 29 лет PARTITION p2 VALUES LESS THAN (50), -- от 30 до 49 лет PARTITION p3 VALUES LESS THAN (100), -- от 50 до 99 лет ) ▶️По списку (List). Данные разделяются на основе конкретных значений в столбце. CREATE TABLE users ( user_id INT, name VARCHAR(100), region VARCHAR(50) ) PARTITION BY LIST (region) ( PARTITION p_north VALUES IN ('Север'), PARTITION p_south VALUES IN ('Юг'), PARTITION p_east VALUES IN ('Восток'), PARTITION p_west VALUES IN ('Запад') ) ▶️По хэшу (Hash). Данные распределяются по партициям на основе хэша. То есть: есть user_id. Если его прописать в PARTITION, а потом указать кол-во партиций, то таблица будет равномерно разделена на указанное число частей: CREATE TABLE users ( user_id INT, name VARCHAR(100), age INT ) PARTITION BY HASH (user_id) PARTITIONS 4 🟠Важное отступление. Вы, наверное, заметили, что при всех этих видах партиционирования мы только лишь создаем пустую таблицу и дальше пишем разные PARTITION BY. Откуда берутся данные? Чтобы партиционирование заработало, нужно вставить данные в таблицу с прописанным PARTITION BY, например, при помощи INSERT. Данные автоматически распределятся, и нужно будет только выбрать их: SELECT * FROM sales PARTITION (p2) ✅ВЕРТИКАЛЬНОЕ ПАРТИЦИОНИРОВАНИЕ Данные разделяются по столбцам. Например, редко используемые столбцы могут быть вынесены в отдельную таблицу. Оно осуществляется немного по-другому. Как пример: -- Всё вместе CREATE TABLE products ( product_id INT PRIMARY KEY, name VARCHAR(100), price DECIMAL(10, 2), description TEXT, category VARCHAR(50), created_at DATETIME, updated_at DATETIME ) -- Разделение CREATE TABLE products_main ( product_id INT PRIMARY KEY, name VARCHAR(100), price DECIMAL(10, 2), category VARCHAR(50) ) CREATE TABLE products_additional ( product_id INT PRIMARY KEY, description TEXT, created_at DATETIME, updated_at DATETIME, FOREIGN KEY (product_id) REFERENCES products_main(product_id) ) Важно при разделении столбцов прописать внешние и первичные ключи, по которым в будущем можно будет связывать эти таблицы при необходимости при помощи join.
Открыть канал и посмотреть медиаOnly registered users can share their opinion.
Be the first to share your impression of this resource!