SQL for junior
29 subscribers
3 photos
SQL для начинающих. Здесь ты найдешь уроки, советы, практические примеры и ответы на вопросы, чтобы стать SQL-профи с нуля.
Download Telegram
🎯 #SQLAntiPattern: LIKE в начале строки

Частая ошибка при поиске по тексту:
-- Очень медленный запрос!
SELECT * FROM products
WHERE name LIKE '%apple%';


Проблема: индексы не могут эффективно использоваться с LIKE, когда маска начинается с '%'!

Решения:

1) Используйте полнотекстовый поиск:
-- PostgreSQL
SELECT * FROM products
WHERE to_tsvector('english', name) @@ to_tsquery('apple');

-- MySQL
SELECT * FROM products
WHERE MATCH(name) AGAINST('apple' IN NATURAL LANGUAGE MODE);


2) Создайте отдельную колонку для поиска:
-- При вставке:
UPDATE products SET name_lower = LOWER(name);

-- При поиске:
SELECT * FROM products
WHERE name_lower LIKE '%apple%';


💡 Полнотекстовый поиск может быть в сотни раз быстрее LIKE '%...%'!

#SQLOptimization #ПроизводительностьSQL
💘1
🎯 #SQLAntiPattern: Отсутствие индексов

Запросы без индексов могут работать в ТЫСЯЧИ раз медленнее!

Проблемный запрос:
SELECT * FROM orders 
WHERE customer_email = 'user@example.com';


Если у нас миллионы заказов и нет индекса по customer_email, СУБД будет проверять КАЖДУЮ строку! 🐢

Правильное решение:
CREATE INDEX idx_orders_customer_email ON orders(customer_email);


Как определить, нужен ли индекс?
- Используйте EXPLAIN для анализа запроса
- Индексируйте поля в WHERE, JOIN, GROUP BY, ORDER BY
- Учитывайте кардинальность (число уникальных значений)

💡 Помните: индексы ускоряют SELECT, но замедляют INSERT/UPDATE/DELETE.

#Индексы #SQLOptimization
💘1