2015-09-02 5 views
0

У меня есть большой стол (db2.table1), содержащий чуть более 3 миллиардов строк данных. Я пытаюсь выбрать определенный процент (например, 50 процентов в качестве примера) строк из этой очень большой таблицы и вставить его в другую таблицу, которая изначально пуста.Самый быстрый способ скопировать процент строк из массивной таблицы?

У меня есть этот запрос,

INSERT INTO db1.table1 (col1, col2, col3, col4) 
SELECT TOP 50 PERCENT col1, col2, col3, col4 FROM db2.table1; 

Это работает, но это невероятно медленно. Потребовалось почти час, чтобы выбрать около 80% стола. Однако, когда я запускаю select * и вставляю запрос на копирование по всем строкам данных (например, ниже), он заканчивается в течение 3 минут.

INSERT INTO db1.table1 (col1, col2, col3, col4) 
SELECT * FROM db2.table1; 

С моей Reasearch, я понял, что что-то делать с TOP необходимости отсортировать строки данных первого, который требует много дискового ввода/вывода, и это может вызвать довольно значительное замедление особенно на столе, как большой как это.

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

Редактировать: Я должен добавить, что я действительно не знаю или не забочусь о том, какие строки выбраны, поскольку таблица содержит случайно генерируемые буквенно-цифровые строки. Мне просто нужно скопировать строки x или y% таблицы для целей тестирования.

+0

Шаг 1 - определить, какие строки вы хотите скопировать. –

+0

Шаг 2 - Вставьте строки '' wanted ''в временную таблицу. – FutbolFan

+1

Какой у вас релиз Teradata? TOP, в результате чего сорт звучит как очень старый. Вместо этого попробуйте «SEELCT * FROM db2.table1 SAMPLE 0.5'. – dnoeth

ответ

0

Экспортируйте таблицу в файл, вырезайте требуемый amout и импортируйте файл.

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