【问题标题】:SQL Stored Procedure issue due to the Lack of SP Performance由于 SP 性能不足导致的 SQL 存储过程问题
【发布时间】:2010-02-15 09:33:45
【问题描述】:

主要问题是在我的 sp 中有不同的对象和逻辑可能会导致性能不足。

我在 SP 上看到的内容以及 SP 中正在使用的表格 1- 临时表,如下所示; (2个临时表)

创建表#TEMP_TABLE( AB INT 非空, AC INT 不为空, AD INT 非空, AF INT NULL, AG INT NULL, REFERENCE_NUMBER INT NULL ) 在#TEMP_TABLE(AB、AC、AD)上创建非聚集索引 IX_1

2- 将进程插入到创建临时表中作为 SP 中的 TEMP1

3- 删除表 #TEMP_TABLE 删除表 #TEMP_TABLE2 在SP的末尾

4- 有两个表用于连接自己,但不是所有使用 JOIN 运算符的“on”情况的字段。例如;在第一个表上声明了聚集索引字段,加上不在第一个表的聚集索引组中的日期列..

简称;聚集和非聚集索引很重要,但我应该按什么顺序声明它们。我需要哪种索引类型,告诉我创建索引的顺序,以便进一步使用 JOIN 流程等。

5- 我应该使用表变量而不是临时表。好的会更好,但是有很多问号不允许我使用表变量..

*插入表变量不会利用并行性。 ref->

6- 我听说过逻辑读取。我真的应该关心这些数字吗? 示例数据结果的详细信息如下所示 (*)

7- 执行计划...

*输出:

表“频道”。扫描计数 0,逻辑 读取 2,物理读取 0,预读 读取 0,lob 逻辑读取 0,lob 物理读取 0,lob 预读 0. 表“XYZ_DATE”。扫描计数 1,逻辑读取 2,物理读取 0, read-ahead 读取 0,lob 逻辑读取 0, lob 物理读取 0, lob 预读读数为 0。 表 'XYZ01'。扫描计数 3171, 逻辑读取 13135,物理读取 153,预读读取 0,lob 逻辑 读取 0,lob 物理读取 0,lob 预读读数为 0。 表 'XYZ02'。扫描计数 5、逻辑读51256、物理读 0,预读读取 0,lob 逻辑 读取 0,lob 物理读取 0,lob 预读读数为 0。 表 '#TEMP_TABLE_______________________________________________________________________________________________000000000840'。扫描计数 0,逻辑读取 97, 物理读取 0,预读读取 0, lob 逻辑读取 0,lob 物理 读取 0,lob 预读读取 0。表 '工作表'。扫描计数 0,逻辑 读取 0,物理读取 0,预读 读取 0,lob 逻辑读取 0,lob 物理读取 0,lob 预读 0.

(受影响的 32 行)表格 '#TEMP_TABLE2_______________________________________________________________________________________________000000000841'。扫描计数 0,逻辑读取 64, 物理读取 0,预读读取 0, lob 逻辑读取 0,lob 物理 读取 0,lob 预读读取 0。表 ''XYZ03'。扫描计数 0, 逻辑读取 107,物理读取 0, read-ahead 读取 0,lob 逻辑读取 0, lob 物理读取 0, lob 预读读数为 0。表 ''XYZ04''。 扫描计数 32,逻辑读取 129, 物理读取 0,预读读取 0, lob 逻辑读取 0,lob 物理 读取 0,lob 预读读取 0。表 '#TEMP_TABLE_______________________________________________________________________________________________000000000840'。扫描计数 1,逻辑读取 1, 物理读取 0,预读读取 0, lob 逻辑读取 0,lob 物理 读取 0,lob 预读读取 0。

(21 行受影响)

(受影响的 21 行)表格 'XYZ05'。扫描计数 0, 逻辑读取 87,物理读取 0, read-ahead 读取 0,lob 逻辑读取 0, lob 物理读取 0, lob 预读读数为 0。 表 'XYZ01A'。扫描计数 21,逻辑 读取 147,物理读取 0, read-ahead 读取 0,lob 逻辑读取 0, lob 物理读取 0, lob 预读读数为 0。表 'XYZ04'。 扫描计数 0,逻辑读取 84, 物理读取 0,预读读取 0, lob 逻辑读取 0,lob 物理 读取 0,lob 预读读取 0。表 '#TEMP_TABLE2_______________________________________________________________________________________________000000000841'。扫描计数 1,逻辑读取 1, 物理读取 0,预读读取 0, lob 逻辑读取 0,lob 物理 读取 0,lob 预读读取 0。

(*)

【问题讨论】:

  • 重建相关表的索引,然后再次运行查询...

标签: performance time sql-execution-plan


【解决方案1】:

我确实放了一些索引,然后扫描正在寻找.. 现在好多了。

仍在进行性能测试: 关注这里-> Testing Stored Procedure performance

【讨论】:

    猜你喜欢
    • 2011-10-19
    • 1970-01-01
    • 2013-04-01
    • 1970-01-01
    • 2013-04-04
    • 1970-01-01
    • 1970-01-01
    • 2020-06-27
    • 2014-04-18
    相关资源
    最近更新 更多