Улучшение производительности поиска - PullRequest
0 голосов
/ 05 января 2019

Я выполняю операцию поиска (в SSIS) между таблицей A и таблицей B. Ниже приведен пример двух таблиц:

TABLE A (
AID
BID
C
)

TABLE B(
BID
D
E
)

Я выполняю поиск, объединяю оба "BID", получаю D и E из таблицы B. BID - это int. Однако, поскольку таблица A содержит более 150000 записей, ее обработка занимает много времени, от 10 до 15 минут. Я уже создал индекс по BID в таблице B, но это не помогло:

CREATE NONCLUSTERED INDEX [NonClusteredIndex-20190105-141910] ON [dbo].[TableB]
(
    [BID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

Любая подсказка, что я могу сделать больше?

Спасибо

Ответы [ 2 ]

0 голосов
/ 05 января 2019

При выполнении поиска на огромном количестве данных лучше использовать соединение SQL, а не поиск. Попробуйте использовать источник OLEDB, который читает из команды SQL, где вы используете LEFT JOIN запрос.

Также убедитесь, что все поля, включенные в операцию соединения, проиндексированы.

Для получения дополнительной информации вы можете обратиться к:

0 голосов
/ 05 января 2019

Вы можете попробовать включить значения столбцов, которые вы ищете:

CREATE INDEX tableb_bid_d_e ON [dbo].TableB(BID, D, E)

Однако ваша проблема, вероятно, заключается в количестве обрабатываемых строк, поэтому ваш запрос генерирует много данных. Если вы выберете всего несколько строк из A, индекс должен значительно ускорить запросы. Если вы выбираете все строки - значит, нужно обработать много данных.

...