2014-09-16 2 views
0

У меня есть таблица в SQL Server, и мне нужно экспортировать ее данные в файл .CSV.Эффективный способ получить 10 миллионов записей из SQL

Вот детали стола:

ProductId: PK, bigint 
SupId: varchar(100) 
CatalogId: FK, bigint 
Price: float 

Нет индексов.

CSV часть завершена, что означает, что я опробовал несколько библиотек, которые могут написать набор результатов в CSV.

Место, где я застреваю, заключается в том, что SELECT * занимает много времени.

До сих пор у меня нет каких-либо успехов в управлении

SELECT * FROM 

Теперь я знаю, что это очень плохая идея запустить SELECT *, я прочитал довольно много постов.

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

Итак, что я должен читать/учиться?

Как получить данные из SQL?

С уважением.

+1

Укажите структуру таблицы и созданные для нее текущие индексы. –

+0

mysql, oracle, sql server или postgres? – sumit

+0

'SELECT * FROM' что? –

ответ

2

Команда массового копирования (BCP) в Microsoft SQL Server предоставляет возможность вставлять большое количество записей непосредственно из командной строки

bcp mydb.dbo.mytable out "C:\mytable.csv" -c -T 
более

: http://msdn.microsoft.com/en-us/library/ms162802.aspx

EDIT

вы можете использовать bcp при выполнении sql, а также

bcp "SELECT * FROM mydb.dbo.mytable t1 join mydb.dbo.anothertbl t2 on (t1.id=t2.mytable_id)" QUERYOUT C:\mytable.csv -c -T 
+0

Как работает bcp в случае соединения? Просто любопытно! – Codehelp

+0

Я отредактировал свой ответ – sumit

+0

Пробовал свой первый образец, дает синтаксическую ошибку – Codehelp

0

Это сильно зависит от

  • (а) Какой таблицы (ы) выглядеть,
  • (б), какие индексы у вас есть,
  • (с), что ваш запрос, как и
  • (d) что поддерживает ваше оборудование (серверы) ...

    Этот вопрос слишком широк для ответа.

Сколько строк и каких столбцов имеет эта таблица? И вам действительно нужны ВСЕ столбцы (SELECT *) и ВСЕ строки (no WHERE clause) из вашего стола? Если вам действительно нужно все из этого стола - действительно нет «волшебного» способа ускорить сканирование с кластерным индексом

, но попробуйте использовать LOCKS. Когда пользователь обращается к данным, данные получают блокировки, чтобы другой пользователь не мог изменять или удалять данные, которые кто-то читает.

select * from sys_letter_intid WITH (NOLOCK)

SQL Server - when should you use “with (nolock)”

Там же несколько факторов, которые пошли бы на это. Быстрый список вещей, которые можно посмотреть:

  • Скорость вашего сервера. Процессор, память, сетевое подключение будет все быть факторами
  • Если вы делаете SELECT заявления с условиями (например. С использованием WHERE) или один с JOINS, имеющими индексами улучшат вашу производительности, особенно на столе с миллионами строк. Таблицы хэшей сделают огромный чистый положительный результат на большом столе.
  • Написание чистых запросов. Например, если у вас есть большой список предметов , вам необходимо исключить из запроса, выполните LEFT JOIN вместо , используя условие NOT IN.

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

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