Какие преимущества имеет один большой запрос к базе данных по сравнению с большим количеством маленьких - PullRequest
5 голосов
/ 26 октября 2010

Я унаследовал приложение, и оно получает данные из 4 представлений с (в нем XML-файл) кусками по 1000 записей, затем записывает их в XML-файл, все это делится на параметр типа, который имеет 9 различныхвозможности.Это означает, что в худшем случае будет 36 подключений к базе данных для каждой 1000 из этой комбинации типа / вида.

Реальные данные будут состоять из 90 000 строк, и в этом случае 900 - 936 раз извлекают до 1000строк из базы данных.

Теперь мне интересно, какие преимущества это даст для чтения всех данных в приложение и заставить приложение работать с этим для записи файлов 900+.

1000 строк о800 МБ, 90 000 строк - это приблизительно 81 ГБ передаваемых данных.

Код необходимо будет переписать, если мы прочитаем все сразу, и, хотя в этом есть смысл, это одноразовая работа.После 90 000 строк мы никогда больше не будем использовать этот код.Стоит ли тратить 2, 3 часа на переписывание кода, который работает таким образом, чтобы уменьшить количество соединений таким образом?

Ответы [ 4 ]

6 голосов
/ 26 октября 2010

Если это разовая вещь, зачем тратить усилия на ее оптимизацию?Ответ: нет.

Позвольте мне добавить, однако, в ответ на ваш общий вопрос о том, какое преимущество имеет большой запрос перед множеством маленьких: вероятно, ни одного.Если вы выполняете огромный запрос, вы оставляете много волшебства на промежуточном программном обеспечении, оно может работать или не работать хорошо.

Хотя 36 одновременных подключений также не оптимальны, это, вероятно, лучше, чем выполнение запроса, который может вернуть 80 гигабайт данных.Идеальным решением (если вам приходилось использовать этот код более одного раза) было бы переписать его для получения данных в виде кусков, но не оставлять множество открытых соединений одновременно.

4 голосов
/ 26 октября 2010

Если мы говорим о SQL Server, то самым большим недостатком большого запроса (одного пакета) перед многими маленькими (обратите внимание на противоположный смысл задаваемого вами вопроса) является то, что один план запроса на партию.

4 голосов
/ 26 октября 2010

Код уже работает?Если это произойдет, то я не буду тратить время на его переписывание.Вы рискуете ввести ошибки в коде.Поскольку вы будете использовать это один раз и никогда не будете использовать его снова, это не похоже на то, что оно того стоит.

1 голос
/ 26 октября 2010

Если бы это была разовая работа, я бы сказал нет.Много раз я делал вещи, которые я обычно не делал (курсоры), но ТОЛЬКО потому, что это была разовая работа.

Спросите себя, имеет ли смысл потратить 2-3 часа на то, что уже работает, и выникогда не будет использовать снова.Очевидно, что есть и другие факторы, которые необходимо учитывать.Как, например, это заблокирует вашу производственную базу данных на 2-3 часа?

Если нет никаких катастрофических побочных эффектов, я бы сказал, используйте то, что у вас есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...