我有直接表,具有200万条记录,而在SQL查询生成器中运行select语句时,这是非常快的,但是通过程序,要花费1100分钟的记录需要35分钟。我有两列icno
和efpno
。这两列都有重复的记录。我的表有一个聚集索引和一个包含icno
和efpno
的非聚集索引。
请检查我的查询和建议。
SELECT COUNT(*)
INTO p_count
FROM ct_rgpldgr
WHERE ctrgp_nric = p_ctegd.ctegd_nric
AND ctrgp_epfno = p_ctegd.ctegd_epfno
加载文件中的ctrgp_nric,ctrgp_epfno。该查询从.txt文件读取。此nric和epf编号将在加载文件中。
我运行调优顾问和执行平面,但显示估计成本0.03
。
请咨询
谢谢
答案 0 :(得分:2)
查询慢的原因多数时候是全表扫描。为了找出这些全表扫描发生的位置,您需要了解查询的执行计划。例如,可以使用Microsoft SQL Server Management Studio完成此操作。
突出显示查询,然后单击以下菜单项,可以在Microsoft SQL Server Management Studio中获得估计的执行计划:
这将显示如下图:
此图在每个节点上都有一个成本估算。与上面突出显示的节点一样,具有高成本的节点尤其令人感兴趣。成本较高的节点主要表示MSSQL正在执行全表扫描的表,并且可能需要在其中添加一些索引。在知道要完全扫描哪些表之后,您将需要找到应在其上建立索引的列,并且该列通常是查询中正在执行内部联接的列。