Вставьте данные в SQL-сервер с лучшей производительностью
У меня есть приложение, которое интенсивно использует БД (SQL Server).
Поскольку он должен иметь высокую производительность, я хотел бы знать самый быстрый способ вставить запись в DB.Fastest с точки зрения времени выполнения.
Что я должен использовать?
Как я знаю, самый быстрый способ - это создать хранимую процедуру и вызывать ее из кода (ADO.NET). Пожалуйста, дайте мне знать, есть ли лучший способ, или, возможно, есть некоторые другие методы для повышения производительности.
4 ответа
Пожалуйста, дайте мне знать, есть ли лучший способ, или, возможно, есть некоторые другие методы для повышения производительности.
- Не открывайте одно соединение для каждой записи. Узнайте, как пул соединений обычно не позволяет случайно открыть одно соединение для каждой записи.
- Если возможно, не открывайте одну транзакцию на запись. Также не оставляйте транзакцию открытой на неоправданные промежутки времени.
- Рассмотрим дизайн таблицы: узкие таблицы с несколькими индексами / ограничениями и без триггеров.
- Если вам нужна быстрая вставка, потому что вы веб-приложение и хотите вернуть страницу пользователю СЕЙЧАС, или вы являетесь приложением winform и блокируете поток UI, рассмотрите возможность выполнения вставки асинхронно или в другом потоке.
- Если вам нужна быстрая вставка для импорта файла в миллион строк, рассмотрите возможность массовой вставки.
- Если все, что вы хотите сделать, это сохранить данные, а не запрашивать их... попробуйте вместо этого использовать решение на основе файлов.
Массовая вставка будет самой быстрой, поскольку она минимально регистрируется, возможно, вы можете использовать класс SqlBulkCopy
"Это зависит".
- Сколько строк вы говорите о вставке?
- Как часто они будут вставлены?
- Какие другие операции с базой данных будут происходить одновременно?
- Будут ли вставлены строки из-за действий пользователя (нажатия кнопки) или из-за какого-то внешнего раздражителя?
Основываясь на вашем обновлении, я думаю, вы должны рассмотреть механизмы, отличные от простого кода. Посмотрите на службы интеграции SQL Server, которые оптимизированы для массовых операций с базами данных. Возможно, что вам нужно простое задание служб SSIS, которое периодически запускается для массовой вставки всех "новых" данных, соответствующих определенным критериям. Это позволит со временем модифицировать использование таких вещей, как промежуточные таблицы или промежуточные серверы, если это окажется необходимым.
Вы сделали математику? 2M/ день = 83k/ час = 1388/ мин = 23/ секунду.
При скорости 23 вставок в секунду SQL Server не потеет.