我正在将数据从一个未规范化的数据库迁移到另一个规范化的数据库。我可以迁移几乎所有数据,但是到查询持续约5分钟的时间,我认为这太多了。
这是实体关系图:
归一化数据库图
以及未规范化数据库的图片:
未规范化的数据库
我要在出现问题的地方填写的表是“项目”,查询是:
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行表
谢谢!
答案 0 :(得分:0)
仅通过注释掉一个连接(以及来自该表的相关列),开始测试SELECT,然后查看哪个查找引起了缓慢。之后,检查是否可以使用索引的其他列进行查找。理想情况下,您将在其PK上加入LOS_CAPOS.Compras。如果不能,请按照我在下面提到的方法进行测试,方法是选择一列,创建一个非聚集索引,然后对该表进行所有SELECT / INSERT / UPDATE / DELETE操作的测试,以查看产生的影响。
任何查询调整/优化都只能通过查看查询计划来完成。并且您需要知道索引会减慢INSERT / UPDATE / DELETE操作,因为索引也需要更新。因此,针对哪个表,哪个列,读取与写入注意事项,存在不同的索引编制方案,不存在解决慢度问题的最终解决方案。