SQL-запрос вставки занимает слишком много времени при переносе - PullRequest
0 голосов
/ 18 ноября 2018

Я мигрирую данные из одной ненормализованной базы данных в другую нормализованную. Я мог перенести почти все данные, но дошел до того, что запрос длится около 5 минут, и я думаю, что это слишком много.

Вот диаграмма отношений сущностей:

Диаграмма нормализованной базы данных

image

И изображение ненормализованной базы данных:

Ненормализованная база данных

image Таблица, которую я хочу заполнить, где у меня возникла проблема, называется «Предметы» и запрос:

INSERT INTO LOS_CAPOS.Items (Item_Factura_Nro, Item_Compra_Cod, Item_Factura_Monto, Item_Factura_Cantidad, Item_Factura_Descripcion)
SELECT f.Factura_Nro, c.Compra_Cod, Item_Factura_Monto, Item_Factura_Cantidad, Item_Factura_Descripcion
FROM LOS_CAPOS.Facturas f
INNER JOIN gd_esquema.Maestra m ON f.Factura_Nro = m.Factura_Nro
INNER JOIN LOS_CAPOS.Compras c ON c.Compra_Fecha = m.Compra_Fecha AND c.Compra_Cantidad = m.Compra_Cantidad

Facturas - это 7664 строки, а Compras - таблица из 78327 строк

Спасибо!

1 Ответ

0 голосов
/ 19 ноября 2018

Начните тестировать SELECT, только закомментировав соединение (и связанные столбцы, приходящие из этой таблицы) и посмотрите, какой поиск вызывает медлительность.После этого проверьте, можете ли вы использовать другие столбцы, которые проиндексированы, для поиска.В идеале вы должны присоединиться к LOS_CAPOS.Compras на его ПК.Если вы не можете, начните тестирование, как я упоминал ниже, выбрав столбец, создайте некластеризованный индекс и протестируйте все операции SELECT / INSERT / UPDATE / DELETE в этой таблице, чтобы увидеть влияние.

Любая настройка / оптимизация запроса может быть выполнена только путем просмотра плана запроса.И вам нужно знать, что индекс будет замедлять операции INSERT / UPDATE / DELETE, так как индекс также должен быть обновлен.Таким образом, существуют разные сценарии индексации, для которых в таблице, в каком столбце чтение и сопоставление с записью не существует окончательного решения, которое решает медлительность.

...