Какие условия нельзя делать в where
Python
Junior
Без компании
Какие условия нельзя делать в where
Ответы
В SQL (и в ORM типа Django ORM или SQLAlchemy) есть несколько условий, которые не стоит использовать в `WHERE`:
- **Функции над колонками** – например, `WHERE LOWER(column) = 'value'` не использует индекс. Лучше хранить данные в нужном регистре.
- **Не-SARGable условия** – например, `WHERE column LIKE '%substring%'` (ведущий `%`). Используйте `LIKE 'substring%'` для индексов.
- **Сравнение разных типов** – например, `WHERE string_column = 123` может привести к неявному приведению типов и плохой производительности.
- **OR с разными колонками** – `WHERE col1 = 'x' OR col2 = 'y'` часто хуже, чем два отдельных запроса с `UNION ALL`.
Пример плохого условия:
```
SELECT * FROM users WHERE DATE(created_at) = '2023-01-01';
```
Лучше:
```
SELECT * FROM users
WHERE created_at >= '2023-01-01' AND created_at < '2023-01-02';
```