有表A下:StuNO   StuName
-------------------
...
1001    aaaaaaa
1002    bbbbbbb
...
(N条记录!)表B:ID     StuNO   Score
------------------------
...
10000  1001    90
10001  1001    80
...
(N*M条记录)第二个表的主键是ID..我现用SQL语句:
 select * from B where StuNO='1001'
执行时间是相当的吓人...慢...而换成:
select * from B where ID in(10000,10001)则比较快(这只是测试用的..我现在是由StuNO得出表B里所有记录,这条SQL语句没意义)请问如果何解决第一条SQL语句执行慢的问题!!!最好不要改数据库结构(记录超过10万)

解决方案 »

  1.   

    第一条里有N个StuNO = '1001'的记录, 当然相对很慢了.而第二条, 只有两条记录, 而且是在主键上(在缺省下, 主键上有簇索引), 当然很快了.
      

  2.   


    在B表的StuNo上建一个索引就行了。CREATE INDEX ix_StuNo ON B(StuNo)
      

  3.   

    请问大大..如果在StuNO建立索引
     
           
     我是楼主..再次说明一下我的问题:
      
     如果何从表B中得出StuNO等于指定值的所有记录???最主要是快速!!!
     
      select * from B where StuNO='1001'这条灰常慢
     
      

  4.   

    晕,索引是与表或视图关联的磁盘上结构,可以加快从表或视图中检索行的速度.第二个表的主键是ID,本身具有索引,而
    你的StuNo字段没有索引,速度上当然是索引块了
      

  5.   

    想提高数据的查询速度,最关键的是做好数据库的优化。一方面是在建表的时候,比如:设置主键字段,增加索引字段,对于复杂的表可以创建视图,另一方面是在写SQL语句的时候尽量加上where条件来约束,并且约束的条件越细数据记录数相应的会少一些,还有就是查询的时候不要使用Select * from 表名,尽量使用Select 字段 from 表名,除非你确实是需要表里所有的字段。