Logical Reads指的是逻辑读
执行SELECT * FROM [order details] 他用的索引扫描Index ScanRows        Executes    StmtText                                                                                
----------- ----------- -----------------------------------------------------------------------------------------
2154        1           SELECT * FROM [order details]                                                            
2154        1             |--Clustered Index Scan(OBJECT:([Northwind].[dbo].[Order Details].[PK_Order_Details])) 执行SELECT * FROM [order details] WHERE [ProductID]=@1 他用的是索引定位Index Seek
Rows        Executes    StmtText                   
----------- ----------- -----------------------------------------------------------------------------------------------------------------------------------------------
37          1           SELECT * FROM [order details] WHERE [ProductID]=@1                                        
37          1             |--Book Lookup(BOOKMARK:([Bmk1000]), OBJECT:([Northwind].[dbo].[Order Details]))    
37          1                  |--Index Seek(OBJECT:([Northwind].[dbo].[Order Details].[ProductID]), SEEK:([Order Details].[ProductID]=Convert([@1])) ORDERED FORWARD)                                                                    一般情况Index Seek比Index Scan要读的行数要少一些,但是这两条语句都是把所有列都显示出来,而第一条和第二条他们扫描对象是不一样.因为第二条扫描的是ProductID索引而ProductID索引中只有一列.所以第二条比第一条多了一个Book Lookup
如果ProductID索引是包括所有列的索引的话,那第二条就比第一条也少了.

解决方案 »

  1.   

    你试一下这两条就知道了
    SET STATISTICS IO ON
    SET STATISTICS PROFILE on
    SELECT ProductID FROM [order details]
    SET STATISTICS IO off
    SET STATISTICS PROFILE off--表 'Order Details'。扫描计数 1,逻辑读 5 次,物理读 0 次,预读 0 次。SET STATISTICS IO ON
    SET STATISTICS PROFILE on
    SELECT ProductID FROM [order details] where ProductID = '11'
    SET STATISTICS IO off
    SET STATISTICS PROFILE off
    --表 'Order Details'。扫描计数 1,逻辑读 2 次,物理读 0 次,预读 0 次。