Notice: file_put_contents(): Write of 956 bytes failed with errno=28 No space left on device in /var/www/tgoop/post.php on line 50

Warning: file_put_contents(): Only 16384 of 17340 bytes written, possibly out of free disk space in /var/www/tgoop/post.php on line 50
Data Science. SQL hub@sqlhub P.2127
SQLHUB Telegram 2127
💡 Продвинутый SQL-совет: используйте partial indexes как «селективный ускоритель», но не только для WHERE — ещё и для JOIN-ов.

Большинство разработчиков делают частичные индексы так:
CREATE INDEX idx_active_users ON users(id) WHERE active = true;

Но фишка в том, что partial index может радикально ускорить запросы, где фильтр стоит не в WHERE, а «прячется» в JOIN-условии. Оптимизатор всё равно понимает условие и использует индекс.

Например, у вас есть таблица logs, где 95% строк — архив, и только 5% актуальные. Запрос делает join:


SELECT u.id, l.event
FROM users u
JOIN logs l ON l.user_id = u.id AND l.is_archived = false;


Если делать обычный индекс, он будет огромный. Но partial index:


CREATE INDEX idx_logs_active ON logs(user_id)
WHERE is_archived = false;


Теперь:
- индекс в 20–30 раз меньше
- cache hit rate выше
- планы меняются с seq scan на index scan
- JOIN начинает работать почти как в in-memory базе

Прикольно, что работает даже если в SELECT самого условия нет — главное, чтобы оно было в ON.

Это отличный способ ускорять «холодные» большие таблицы, где часто обращаются только к маленькому активному сегменту.

@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥86



tgoop.com/sqlhub/2127
Create:
Last Update:

💡 Продвинутый SQL-совет: используйте partial indexes как «селективный ускоритель», но не только для WHERE — ещё и для JOIN-ов.

Большинство разработчиков делают частичные индексы так:
CREATE INDEX idx_active_users ON users(id) WHERE active = true;

Но фишка в том, что partial index может радикально ускорить запросы, где фильтр стоит не в WHERE, а «прячется» в JOIN-условии. Оптимизатор всё равно понимает условие и использует индекс.

Например, у вас есть таблица logs, где 95% строк — архив, и только 5% актуальные. Запрос делает join:


SELECT u.id, l.event
FROM users u
JOIN logs l ON l.user_id = u.id AND l.is_archived = false;


Если делать обычный индекс, он будет огромный. Но partial index:


CREATE INDEX idx_logs_active ON logs(user_id)
WHERE is_archived = false;


Теперь:
- индекс в 20–30 раз меньше
- cache hit rate выше
- планы меняются с seq scan на index scan
- JOIN начинает работать почти как в in-memory базе

Прикольно, что работает даже если в SELECT самого условия нет — главное, чтобы оно было в ON.

Это отличный способ ускорять «холодные» большие таблицы, где часто обращаются только к маленькому активному сегменту.

@sqlhub

BY Data Science. SQL hub


Share with your friend now:
tgoop.com/sqlhub/2127

View MORE
Open in Telegram


Telegram News

Date: |

Step-by-step tutorial on desktop: Image: Telegram. Hui said the time period and nature of some offences “overlapped” and thus their prison terms could be served concurrently. The judge ordered Ng to be jailed for a total of six years and six months. SUCK Channel Telegram 4How to customize a Telegram channel?
from us


Telegram Data Science. SQL hub
FROM American