SQL Server性能调教的小实验(补)

博客展示了两种SQL查询语句,分别统计了各表的扫描计数、逻辑读等情况。第一种方法中'Specimen_admin_specimen_T'表扫描一次,第二种方法扫描四次。虽部分表扫描次数减少且利用了索引,但不清楚第二种方法'Specimen_admin_specimen_T'表扫描次数多的问题所在,寻求指正。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上面的两个查询的比较还是有一些问题:

SELECT ID

FROM Specimen_admin_specimen_T

WHERE (Species_ID IN

          (SELECT DISTINCT (Species_ID)

         FROM View_All_Tree

         WHERE genus_ID = '{F689E231-0DF5<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />-40C1-A11D-0B4DD3B8187A}')) OR

      (SubSpecies_ID IN

          (SELECT DISTINCT (SubSpecies_ID)

         FROM View_All_Tree

         WHERE genus_ID = '{F689E231-0DF5-40C1-A11D-0B4DD3B8187A}'))

表 'Table_genus'。扫描计数 4,逻辑读 8 次,物理读 0 次,预读 0 次。
表 'Table_species'。扫描计数 6238,逻辑读 12476 次,物理读 0 次,预读 0 次。
表 'Table_subspecies'。扫描计数 14,逻辑读 156 次,物理读 0 次,预读 0 次。
表 'Specimen_admin_specimen_T'。扫描计数 1,逻辑读 84381 次,物理读 0 次,预读 0 次。

-----------------VS----------------
SELECT ID
FROM Specimen_admin_specimen_T
WHERE EXISTS
          (SELECT Species_ID
         FROM view_All_Tree
         WHERE genus_ID = '{FDA6F11C-AC83-44FF-B6E9-345024907C73}' AND
               Species_ID = specimen_admin_specimen_T.Species_ID)
UNION
SELECT ID
FROM Specimen_admin_specimen_T
WHERE EXISTS
          (SELECT Species_ID
         FROM view_All_Tree
         WHERE genus_ID = '{FDA6F11C-AC83-44FF-B6E9-345024907C73}' AND
               subSpecies_ID = specimen_admin_specimen_T.subSpecies_ID)

表 'Specimen_admin_specimen_T'。扫描计数 4,逻辑读 86665 次,物理读 0 次,预读 0 次。
表 'Table_subspecies'。扫描计数 1,逻辑读 34 次,物理读 0 次,预读 0 次。
表 'Table_species'。扫描计数 2,逻辑读 4 次,物理读 0 次,预读 0 次。
表 'Table_genus'。扫描计数 2,逻辑读 4 次,物理读 0 次,预读 0 次。

----------------------
尽管'Specimen_admin_specimen_T'用到了索引,而且'Table_species'表的扫描次数大为减少并利用了索引,但是第二种方法的'Specimen_admin_specimen_T'表扫描的四次,而第一种方法只扫描了一次,不知道这里面的问题出在哪里,还望大家指正。

转载于:https://www.cnblogs.com/Seraph/archive/2005/03/11/117157.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值