2012-02-21 5 views
0

Я пишу небольшое тестовое приложение, которое подключается к базе данных SQL Server, в которой есть две таблицы. Таблица 1 представляет собой список данных с не уникальным ключом, который указывает на несколько строк в таблице 2. В настоящий момент то, что я делаю, пересекает каждую запись в таблице 1, а затем получает соответствующие записи из Таблицы 2 с отдельным запросом. В таблице 2 содержится более 26 миллионов записей, и этот процесс занимает очень много времени. Данные в Таблице 1 могут содержать всего несколько сотен записей в нем или что-то около 1 миллиона.ADO.NET SQL Query Join?

Есть ли способ ускорить этот доступ к данным? Возможно, используя соединение таблицы, чтобы получить все данные в одном запросе? Или что-нибудь еще?

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

Обратите внимание, что я использую ADO внутри .NET с C#.

EDIT: Я нормально выполняю JOIN-запрос, но спрашиваю, будет ли это более эффективным с ADO? Я знаю, что это будет более эффективно, но не уверен, справится ли это с ADO. Также ищем пример кода C# для этого. Благодарю.

+0

Это очень просто; вы можете использовать внутренний оператор соединения между обеими таблицами. С другой стороны, в худшем случае вы пытаетесь загрузить в память 100 * 26 миллионов строк. Сколько строк вы ожидаете, что запрос будет возвращен в целом (сколько строк вы действительно получаете из Table2?) – dash

+0

В Таблице 2, вероятно, будет около 8-10 строк в таблице. – Jonnster

ответ

3

Вы можете получить все данные за один раз с JOIN, как это:

SELECT t1.NonUniqueKey, t2.* 
FROM Table1 t1 
    JOIN Table2 t2 ON t1.NonUniqueKey = t2.NonUniqueKey 

Вы хотите, чтобы рассмотреть вопрос о создании индекса на NonUniqueKey, но это должно быть для вас лучше, чем выполнение п запросов , по одному на строку в таблице 1

+0

Спасибо, это здорово. Полностью моя ошибка не объяснять лучше, но я согласен с запросом на объединение, но больше смотрю, как использовать это из ADO.NET как можно эффективнее. Будет ли выполнение этого запроса с помощью SqlDataReader самым быстрым способом? – Jonnster

+0

SqlDataReader * может * быть более эффективным, чем использование SqlDataAdapter для заполнения DataSet/DataTable, хотя какая разница - вам нужно проверить tbh. Под капотом SqlDataAdapter будет использоваться SqlDataReader. В великой схеме вещей сам запрос и объем данных для передачи по сети, вероятно, будут самыми большими пунктами. – AdaTheDev