【发布时间】:2012-08-05 14:59:23
【问题描述】:
朋友们好,提前感谢您的帮助。
我正在执行一个在两个表之间执行连接的简单查询:
SELECT
F5_CNOMBRE,
F5_CTD,
F5_CNUMSER,
F5_CNUMDOC,
F5_DFECDOC,
F5_NIMPORT,
CD_DFECCAN,
CD_CCODART
FROM ft1
INNER JOIN cc1
ON RTRIM(cc1.CD_CNRODOC) = RTRIM(ft1.F5_CNUMSER) + ft1.F5_CNUMDOC
WHERE F5_CGLOSA LIKE @varNroExpediente + '%'
表 ft1 大约有 100 万条记录,表 cc1 大约有 70 万条记录。
当没有人在/使用这些表时,查询运行速度很快,但是当用户使用它们时,查询大约需要 30/50 秒才能完成。
我正在考虑创建一个索引视图,索引字段 ft1.F5_CNUMSER 和 ft1.F5_CNUMDOC。我认为这会提高性能。我也想听听你对这个问题的看法,如果我在视图上创建索引,查询的表是否有可能在操作中被损坏,这些表对于实际系统来说是非常重要的。
我很欣赏我能在这个主题上获得的洞察力。
【问题讨论】:
-
CD_CNRODOC和F5_CNUMSER是否有充分的理由在数据库中不被修剪?ft1上是否有包含F5_CNUMSER(已修剪)和F5_CNUMDOC的索引? (即一个索引有两列。)索引统计信息是最新的吗? -
@HABO 不幸的是,这些修剪是必要的,因为某些数据包含空白。该表没有活动索引,因此在我的理解中没有活动索引统计信息。
-
您选择的那 8 列是否只选择了这两个表的一小部分列?还是他们几乎占了整个桌子?
-
@marc_s ft1 表有 90 列,cc1 有 57 列
标签: sql-server performance sql-server-2008