如果用TABLE SCAN ,当然a会慢,因为更多的数据需要读取

解决方案 »

  1.   

    我在15万记录的表上试了
    the same speed
      

  2.   

    哇 不会吧 
    生成1000000条记录的表
    select rownum=identity(int,1,1), aa=a.name+b.xtype  into #ttt from
    (select top 1000 name from sysobjects)as a,
    (select top 1000 xtype from sysobjects) as b呵呵 看你sysobjects里有多少内容了
      

  3.   

    效率因该B表高一点(在都有 CLUSTERED INDEX在 id,name ):
    因为SQL SERVER会自动进行SCANTABLE,在SQL SERVER中如果你一次检索的数据超过全表的40%,SQL SERVER一般就不会用INDEX,而直接用表扫描。
    而A表占用的PAGE较多,进行表扫描时的效率就低一些。
      

  4.   

    如果两个表都为id和name做了聚簇索引的话,效率都差不多.(具体原因看Online book的相关说明.)
    否则,由于表a和表b的记录量实在相差太大,数据库查询时只是一种虚拟查询,而实际的数据则分为多个片断存储在磁盘的不同部分,查询表a时自然会大量消耗I/O开销(要分别到多个不连续的磁盘片断中取得要查询的数据放入内存),所以查a表慢就是必然.
      

  5.   

    楼上的兄弟:
    说明一下,一个表只能设一个聚簇索引
    所以,楼上兄弟说得id,name都建聚簇索引不可能的。
      

  6.   

    b效率高,建议看一下SQL SERVER2000自带的帮助文档