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

SELECT ID

FROM Specimen_admin_specimen_T

WHERE (Species_ID IN

          (SELECT DISTINCT (Species_ID)

         FROM View_All_Tree

         WHERE genus_ID = '{F689E231-0DF5-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'表扫描的四次,而第一种方法只扫描了一次,不知道这里面的问题出在哪里,还望大家指正。

posted on 2005-03-11 12:42  Seraph  阅读(160)  评论(0编辑  收藏  举报