Какой самый быстрый способ выбрать всю таблицу в SQL Server?

Я пишу приложение, которое считывает всю таблицу, выполняет некоторую обработку, а затем записывает полученные данные в другую таблицу. Я использую класс SqlBulkCopy (версия .NET для «bcp in»), который выполняет вставку очень быстро. Но я не могу найти какой-либо эффективный способ выбора данных в первую очередь. нет .net эквивалента "bcp out", что мне кажется странным.

В настоящее время я использую select * from table_name . Предположительно, для выбора 6000 строк требуется 2,5 секунды ... и всего 600 мс для массовой вставки того же количества строк.

Я ожидал, что выбор данных всегда должен быть быстрее, чем вставка. Каков самый быстрый способ выбрать все строки и столбцы из таблицы?


Ответы на вопросы:

  • Я рассчитал выбор времени на 2,5 секунды двумя способами. Сначала было запущено мое приложение и запущена трассировка sql. второй выполнял тот же запрос в SSMS. Оба восстановили примерно одинаковый результат.
  • Я читаю данные с помощью SqlDataReader.
  • Никакие другие приложения не используют эту базу данных.
  • Моя текущая обработка занимает менее 1 секунды, поэтому время чтения 2+ секунды является относительно большим. Но в основном меня беспокоит (интересует) производительность при масштабировании до 100 000 строк и миллионов строк.
  • Сервер Sql 08r2 и мое приложение запущены на моей машине разработчика.
  • Часть обработки данных настроена на основе, поэтому мне нужно иметь всю таблицу в памяти (для поддержки гораздо больших наборов данных, я знаю этот шаг вероятно, потребуется перенести в SQL, поэтому мне нужно работать только с каждой строкой в ​​памяти)

Вот мой код:

DataTable staging = new DataTable();
using (SqlConnection dwConn = (SqlConnection)SqlConnectionManager.Instance.GetDefaultConnection())
{
    dwConn.Open();
    SqlCommand cmd = dwConn.CreateCommand();
    cmd.CommandText = "select * from staging_table";

    SqlDataReader reader = cmd.ExecuteReader();
    staging.Load(reader);
}
6
задан TheSean 10 March 2011 в 14:10
поделиться