2016-06-30 2 views
1

У меня есть две большие базы данных (по 2.7 миллиона записей), которые необходимо объединить и отсортировать. Сортировка объединенной таблицы занимает много времени, когда выполняется по заказу. Есть ли другой способ быстрее сортировать эту объединенную таблицу? я уже пытался индексация, которая ускоряет выполнение, но я ищу больше скоростей Если кто-нибудь может help.ThanksСамый быстрый способ сортировки в Ms sql

+0

Отсортировано, когда? Зачем вам нужно извлекать 2,7 миллиона строк за один раз, за ​​исключением случаев, когда для дампа? –

+0

Нужна дополнительная информация. – nbirla

+0

Сортировка очень дорогостоящая в SQL. Пара вопросов; Зачем вам эти данные сортируются? И можете ли вы сделать это на своем прикладном уровне? –

ответ

0

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

Возможно, вы захотите проверить this link на несколько советов.

2
  1. Сгруппированы индексы в столбце сортировки [date], чтобы предварительно упорядочить данные в каждой таблице.
  2. Создайте индексированный вид запроса с помощью первичного ключа на ([date], id). Это эффективно создало бы объединенную таблицу, автоматически поддерживаемую движком RDBMS.
  3. Добавить больше оперативный память, сердечников, быстрее SSD-накопителей для Tempdb и т.д.

Update следующих комментариями на подход 1. На основании этого запроса:

Select * 
From table1 
Inner Join table2 On table1.id=table2.id 
Order By table1.[date] 

table2, имеющий id для первичного ключа делает не требуют дополнительных указателей.

table1 выиграют от

CREATE CLUSTERED INDEX idx_table1_date ON table1 ([date]) 
INCLUDE (...all other fields except id which is included anyway...); 
--... so that all the select data is available from the index without another lookup by PK 

Это было бы эффективно создать копию table1 предварительно сортируется по дате. В результате запрос будет сканировать idx_table1_date и искать table2 с помощью первичного ключа.

+0

Мой запрос похож: выберите * из таблицы1 inner join table2 на table1.id = table2.id упорядочить по дате DESC ... Я создал кластеризованный индекс для первичного ключа (id) обеих таблиц. Будет ли создан какой-либо другой индекс? –

+0

Какую таблицу пришла дата? –

+0

Я выполняю внутреннее соединение данных из таблицы1 и таблицы2. Оба содержат столбец даты –

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