Десять основных улучшений планировщика PostgreSQL в PG16:
DISTINCTORDER BY / DISTINCTmemoize для запросов UNION ALLright anti-joinFULL и RIGHT OUTER джойновROWS оконных функцийleft join и unique joins в секционированных таблицахLIMIT вместо UNIQUE для реализации DISTINCT, когда это возможноMerge Join, в бОльшем количестве случаевПодробнее в статье
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥6
Использование временных таблиц для оптимизации запросов
Временные таблицы могут быть мощным инструментом для оптимизации сложных запросов, когда речь идёт о сложных соединениях и агрегациях. Давай рассмотрим эту технику подробнее.
В высоконагруженных приложениях некоторые запросы включают несколько шагов, агрегации или сложную логику. Временные таблицы разбивают запрос на управляемые фрагменты, сохраняя промежуточные результаты для дальнейшего анализа. Такой подход упрощает последующие операции и повышает производительность запроса.
Временные таблицы создаются и наполняются данными в рамках сеанса. Они живут в течение сеанса или до тех пор, пока не будут явно удалены. Например:
-- Создание временной таблицы для отфильтрованных заказов
CREATE TEMPORARY TABLE tmp_filtered_orders AS
SELECT order_id, customer_id, order_date, total_amount
FROM orders
WHERE order_date BETWEEN '2023-01-01' AND '2023-06-30';
Благодаря этой временной таблице последующие запросы могут сосредоточиться на отфильтрованных данных о заказах, что снижает сложность операций соединения и фильтрации.
Временные таблицы полезны при работе с агрегациями. Вместо агрегации данных непосредственно из первичных таблиц можно сначала заполнить временную таблицу агрегированными результатами, а затем провести дополнительный анализ:
-- Создание временной таблицы с агрегированными данными о заказах
CREATE TEMPORARY TABLE tmp_order_summary AS
SELECT customer_id, COUNT(order_id) AS order_count, SUM(total_amount) AS total_spent
FROM tmp_filtered_orders
GROUP BY customer_id;
Использование временных таблиц упрощает процесс агрегации и позволяет избежать повторной обработки одних и тех же данных.
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
DE
Методы оптимизации SQL-запросов в высоконагруженных приложениях
Успех высоконагруженных приложений зависит от эффективной работы БД, лежащих в их основе. По мере роста сложности SQL-запросов, особенно тех, которые включают в себя сложные соединения и проблемы…
Успех высоконагруженных приложений зависит от эффективной работы БД, лежащих в их основе. По мере роста сложности SQL-запросов, особенно тех, которые включают в себя сложные соединения и проблемы…
❤🔥6
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥2
PEP 723
⭐️ Т.е. по сути ты сможешь описать зависимости скрипта в метадате без их установки через pip.
Если(когда) pep будет принят
# /// noscriptЭтот PEP определяет формат метаданных, который может быть встроен в однофайловые скрипты Python для облегчения запуска, IDE и других внешних инструментов, которым может потребоваться взаимодействовать с такими скриптами.
# requires-python = ">=3.11"
# dependencies = [
# "requests<3",
# "rich",
# ]
# ///
import requests
from rich.pretty import pprint
resp = requests.get("https://peps.python.org/api/peps.json")
data = resp.json()
pprint([(k, v["noscript"]) for k, v in data.items()][:10])
Если
Please open Telegram to view this post
VIEW IN TELEGRAM
🆒3❤🔥2
Please open Telegram to view this post
VIEW IN TELEGRAM
😁3❤🔥2
Оптимизация подзапросов и агрегаций
Подзапросы и агрегации часто встречаются в SQL-запросах, но могут влиять на производительность. Давай рассмотрим дополнительные методы оптимизации.
Помимо преобразования подзапросов в
JOIN или использования EXISTS, рассмотри следующие советы по оптимизации подзапросов:SELECT могут привести к снижению производительности. Если нужно получить данные из связанных таблиц, используйте вместо этого JOIN.TOP (SQL Server) или LIMIT (MySQL, PostgreSQL, SQLite).Агрегации, такие как
SUM, COUNT, AVG и другие, необходимы, но могут быть ресурсоёмкими. Вот как их оптимизировать:Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
DE
Методы оптимизации SQL-запросов в высоконагруженных приложениях
Успех высоконагруженных приложений зависит от эффективной работы БД, лежащих в их основе. По мере роста сложности SQL-запросов, особенно тех, которые включают в себя сложные соединения и проблемы…
Успех высоконагруженных приложений зависит от эффективной работы БД, лежащих в их основе. По мере роста сложности SQL-запросов, особенно тех, которые включают в себя сложные соединения и проблемы…
🆒4❤🔥1
Please open Telegram to view this post
VIEW IN TELEGRAM
postgrespro.ru
PostgreSQL : Документация: 18: Документация к PostgreSQL 18.1
❤🔥7
Избегай курсоров и циклов для повышения производительности
Курсоры и циклы следует редко использовать в SQL, поскольку они могут быть медленными и неэффективными, особенно в высоконагруженных приложениях. SQL предназначен для операций на основе множеств, которые, как правило, эффективнее. Вот как свести к минимуму использование курсоров и циклов:
Вместо использования курсоров или циклов для манипулирования данными строка за строкой используй операции на основе множеств, предоставляемые SQL. Например, ты можешь использовать операторы
UPDATE или DELETE с предложениями WHERE для изменения или удаления нескольких строк на основе определённых условий.Если нужно обработать много строк, рассмотри возможность использования пакетной обработки. Разбей операцию на управляемые фрагменты, используя
LIMIT (MySQL, PostgreSQL, SQLite), FETCH FIRST (IBM Db2) или аналогичные выражения. В каждой итерации обрабатывай подмножество строк, снижая нагрузку на ресурсы сервера.Если ты обнаружишь, что циклы необходимы для решения конкретной задачи, постарайся оптимизировать их, используя операции на основе множеств внутри цикла. Минимизируй взаимодействие с БД, получая и манипулируя большими наборами данных на каждой итерации, сокращая количество взаимодействий с базой данных.
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
DE
Методы оптимизации SQL-запросов в высоконагруженных приложениях
Успех высоконагруженных приложений зависит от эффективной работы БД, лежащих в их основе. По мере роста сложности SQL-запросов, особенно тех, которые включают в себя сложные соединения и проблемы…
Успех высоконагруженных приложений зависит от эффективной работы БД, лежащих в их основе. По мере роста сложности SQL-запросов, особенно тех, которые включают в себя сложные соединения и проблемы…
🆒4❤🔥1
Заключительный пост цикла.
🙂 Применяя методы, описанные в постах выше, ты сможешь улучшить навыки оптимизации SQL-запросов, особенно когда речь идёт о высоконагруженных приложениях, сложных соединениях и проблемах индексирования.
🙃 Понимание планов выполнения запросов, стратегий индексирования, переписывания запросов, денормализации данных, временных таблиц, оптимизации подзапросов и агрегирования. А также отказа от таких неэффективных методов, как курсоры и циклы, позволит оптимизировать запросы к БД для достижения максимальной производительности.
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
DE
Методы оптимизации SQL-запросов в высоконагруженных приложениях
Успех высоконагруженных приложений зависит от эффективной работы БД, лежащих в их основе. По мере роста сложности SQL-запросов, особенно тех, которые включают в себя сложные соединения и проблемы…
Успех высоконагруженных приложений зависит от эффективной работы БД, лежащих в их основе. По мере роста сложности SQL-запросов, особенно тех, которые включают в себя сложные соединения и проблемы…
🆒3❤🔥1
Команда Postman Open Technologies собирает информацию о стандартах, отраслевых форматах и спецификациях, открытых API.
Каталог практик и паттернов оформлен как рабочее пространство Postman
На текущий момент там описаны следующие паттерны:
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥3🆒2
IMG_20240315_000134_555.png
971 KB
Шпаргалка по SQL
JOIN, IN, LIKE, BETWEEN, ORDER BY и другое, ботай!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥3
📦 PyPI
docker pull apache/airflow:2.8.3#airflow
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥3
Использование SELECT *
SELECT * FROM employees;
SELECT employee_id, first_name, last_name FROM employees;Отсутствие индексов
CREATE INDEX idx_last_name ON employees(last_name);
SELECT * FROM employees WHERE last_name = 'Smith';Чрезмерное использование подзапросов
SELECT department_name FROM departments WHERE department_id IN (SELECT department_id FROM employees);
SELECT DISTINCT d.department_name FROM departments d JOIN employees e ON d.department_id = e.department_id;Неэффективные JOIN
SELECT * FROM employees, departments;
SELECT e.employee_name, d.department_name FROM employees eНеиспользование выражений WHERE
INNER JOIN departments d ON e.department_id = d.department_id;
SELECT * FROM orders;
SELECT * FROM orders WHERE order_date >= '2023-01-01';Игнорирование планов выполнения запросов
EXPLAIN SELECT * FROM products WHERE category = 'Electronics';Отсутствие оптимизации больших наборов данных
SELECT * FROM products LIMIT 10 OFFSET 20;Повторяющиеся агрегации
SELECT department, SUM(salary) AS total_salary FROM employees GROUP BY department;
WITH DepartmentSalaries AS (Неадекватная обработка ошибок
SELECT department, SUM(salary) AS total_salary FROM employees GROUP BY department
)
SELECT * FROM DepartmentSalaries;
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥8
BEGIN;
-- SQL выражение
IF some_condition THEN
ROLLBACK; -- Откат транзакции при ошибке
ELSE
COMMIT; -- Коммит транзакции при успешном выполнении всех выражений
END IF;
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥4😁2