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: |

5Telegram Channel avatar size/dimensions Channel login must contain 5-32 characters As five out of seven counts were serious, Hui sentenced Ng to six years and six months in jail. How to create a business channel on Telegram? (Tutorial) Other crimes that the SUCK Channel incited under Ng’s watch included using corrosive chemicals to make explosives and causing grievous bodily harm with intent. The court also found Ng responsible for calling on people to assist protesters who clashed violently with police at several universities in November 2019.
from us


Telegram Data Science. SQL hub
FROM American