TGViewer
Библиотека шарписта | C#, F#, .NET, ASP.NET Библиотека шарписта | C#, F#, .NET, ASP.NET @csharpproglib · 21.6K subscribers
Post #6362 4.1K
🖥 Как убить производительность базы данных

Когда вы пишете SELECT * FROM users WHERE email = 'user@example.com' без индекса на поле email, база данных выполняет Full Table Scan — последовательно проверяет каждую строку таблицы.

Если в таблице 10 записей — не страшно. Но когда их миллион база читает миллион строк, чтобы найти одну нужную.

Производительность деградирует нелинейно. С ростом данных время выполнения запроса растёт экспоненциально. Запрос, который работал за 10мс на тестовой базе, в продакшене может выполняться минутами.

Как решить проблему

• Добавить индекс

Самое очевидное решение — создать индекс на нужное поле:
CREATE INDEX idx_users_email ON users(email);


• Составные индексы

Если фильтруете по нескольким полям, используйте составной индекс. Порядок полей важен — самое селективное поле должно быть первым:
CREATE INDEX idx_users_status_created ON users(status, created_at);


• Функциональные индексы

Для запросов с функциями создавайте индексы на выражения:
CREATE INDEX idx_users_email_lower ON users(LOWER(email));


• Партиционирование

Для огромных таблиц разбейте данные на партиции по дате или другому критерию — база будет сканировать только нужные партиции, а не всю таблицу.

• Денормализация и кэширование

Иногда проще продублировать данные или закэшировать результаты частых запросов в Redis/Memcached, чем постоянно гонять тяжёлые запросы по базе.

Индексы — не бесплатны. Они занимают место на диске и замедляют INSERT/UPDATE/DELETE операции. Не нужно индексировать всё подряд — создавайте индексы осознанно.

Это уже не «Hello World» писать. Для таких решений нужно знать не только язык. Подтянуть архитектуру можно на нашем интенсиве. До конца октября со скидкой!

🐸 Библиотека шарписта

#sharp_view
  • 👍 11
  • ❤ 6
  • 🥱 1
More from @csharpproglib
  1. Sep 30, 2026📝 Логирование со строковой интерполяцией Логирование c интерполяцией строк один из самых…
  2. Sep 28, 2026👨‍💻 Не показывайте технические ошибки пользователям Когда приложение падает с необработа…
  3. Sep 26, 2026📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека шарписта #garbage_collector
  4. Sep 25, 2026🔐 NuGet: Microsoft меняет сертификат подписи С 23 сентября Microsoft использует новый сер…
  5. Sep 24, 2026🤩 Как поймать зависший .NET-сервис Приложение начинает тормозить, запросы зависают, а в л…
  6. Sep 23, 2026⚙️ yield return не бесплатный Итераторы выглядят просто, но работают иначе: IEnumerable<in…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →