2016-06-26 3 views
0

Я не знаю, лучше ли использовать временные таблицы в SQL Server или использовать DataTable в C# для отчета. Вот объем отчета: он будет скопирован в рабочую книгу с примерно 10 рабочими листами - каждый лист, содержащий около 1000 строк и около 30 столбцов, поэтому много данных. Есть несколько рекомендаций, но я не мог найти ничего конкретного относительно объема данных, который слишком много для DataTable. Согласно https://msdn.microsoft.com/en-us/library/system.data.datatable.aspx, 16M строк, но мой набор данных кажется громоздким, учитывая количество столбцов, которые у меня есть. Кроме того, мне придется либо сделать несколько SQL-запросов для сбора данных в моем отчете, либо попытаться записать хранимую процедуру в SQL для сбора этих данных. Как мне понять это затруднение?Когда использовать временные таблицы SQL vs DataTables

+0

«Как мне понять это затруднение?» - используйте ощущение кишки и выберите наиболее понятное и доступное решение. Если он окажется слишком медленным, вы можете попробовать что-то другое. Самая важная часть - получить что-то правильно, а затем беспокоиться о скорости. – Tony

ответ

1

Мое эмпирическое правило состоит в том, что если его можно обработать на сервере базы данных, это, вероятно, должно произойти. Имейте в виду, независимо от того, насколько эффективен ваш код на C#, SQL Server будет в большей степени скорее работать с ним быстрее и эффективнее, ведь он был разработан для обработки данных.

Нет никакого позора в использовании таблиц #temp. Они поддерживают статистику, могут быть проиндексированы и/или манипулировать. Один недавний пример: разработчик создает, по общему признанию, изящный запрос с использованием cte, производительность составляла 12-14 секунд против моей в 1 секунду с использованием #temps.

Теперь одна тщательно структурированная хранимая процедура может производить и возвращать 10 наборов данных для ваших рабочих листов. Если вы используете такой продукт, как SpreadSheetLight (есть много доступных опций), это становится небольшим вопросом передачи результатов и создания вкладок (без циклов клеточного уровня ... если вы не хотите или не хотите).

Я также хотел бы добавить, что вы можете значительно сократить количество точек касания и лучше обеспечить соблюдение бизнес-логики, сделав SQL Server тяжелым грузом. Например, клиент представил рейтинг риска 6 Вт, который был по существу равным 6.5. Сотни устаревших отчетов должны были обновляться, а мне нужно было добавить 6W в таблицу сопоставления.

+0

+1 - Только на прошлой неделе у меня был опыт рефакторинга кучей общих табличных выражений в пару таблиц #temp с подключением. Я получил показатель около пятидесяти в производительности и сократил конкуренцию на моем занятом SQL Server. В этом была очень полезной возможность индексирования большой таблицы temp. –

+1

@OllieJones Это отличное чувство, когда вы получаете такие результаты. Несколько лет назад, что займет 14 часов на мэйнфрейме, заняло 6 минут в VFP на ПК. Если бы Аудит знал, что я делаю, они бы вырвали мое сетевое соединение со стены. –

1

Здесь много недостающего контекста - как этот отчет будет доступен и запущен? Это будет работать как сценарий каждый день?

Вы считаете SSRS?

На мой взгляд, лучше всего отвлечь свою бизнес-логику, создав в базе данных Views или Хранимые процедуры. Хранимые процедуры, вероятно, будут способом, но это действительно зависит от вашей конкретной среды. Затем вы можете указать, какие инструменты вы хотите использовать в объекте базы данных. Это имеет ряд преимуществ:

  • , если вы в конечном итоге, имеющие различные версии или различные форматы отчета, и ваша логика когда-либо изменения, вы можете обновить логику в одном месте, а не много.

  • ваш код проще и чист, как правило:

select v.col1, v.col2, v.col3 from MY_VIEW v where v.date between @startdate and @enddate

Я предполагаю, что ваши 10 электронных таблиц будут что-то вроде

Резюме Страницы | Отдел 1 | Отдел 2 | ...

Таким образом, вы можете создать обобщенный вид или SP, создать главную электронную таблицу, связанную с объектом db, которая вытаскивает все соответствующие данные из SQL и использует сводные таблицы или фильтры или что-то еще, что вы хотите, и используйте это для создания ваших копий, которые будут отправлены.

Но прежде чем идти на все эти проблемы, я бы не стал уверенным, что SSRS не вариант, потому что, если вы можете использовать это, у него есть много испеченных функциональных возможностей, которые облегчат вашу жизнь (экспорт в Excel, автоматический параметры даты, запланированное выполнение, подписки на электронную почту и т. д.).

+0

Это ежедневный отчет за последние 30 дней. Вы правы в своих предположениях о таблицах. Спасибо за ваши мысли. Я буду более подробно разбираться в SSRS. Я не понимал, что у него столько интегрированной функциональности. – Missy

Смежные вопросы