有三张表,c1,c2,c3,都只有一个字段,分别为a1,a2,a3
当a1,a2,a3没有索引的时候
select a1,a2,a3 from c1,c2,c3 a1=a2 and a2=a3
先组装c1,c2,c3,成型一个临时表,如各自有1000条数据,就是1000*1000*1000条记录的临时表当a1,a2,a3有索引时
select a1,a2,a3 from c1,c2,c3 a1=a2 and a2=a3
就不直接组装c1,c2,c3,而是把c1的第一条记录取出,应用a2,a3的索引查询,这样就避免了形成庞大的临时表是这样理解得么?

解决方案 »

  1.   

    select a1,a2,a3 from c1,c2,c3 where a1=a2 and a2=a3
    先说语句,要加where 
      

  2.   

    http://topic.csdn.net/u/20091128/11/b49c0bfc-eb52-4dd5-ba05-f079b6e990a5.html
      

  3.   

    哈哈,我错了!
    其实我想知道的是,在交叉查询时,是先组装成临时表后,再对临时表进行where筛选;还是
    从主表中取一条就where筛选一次,再取下一条。
    谢谢了。
      

  4.   

    SQL執行順序
    (8)  SELECT (9) DISTINCT (11) <TOP_specification> <select_list> 
    (1)  FROM <left_table> 
    (3)    <join_type> JOIN <right_table> 
    (2)      ON <join_condition> 
    (4)  WHERE <where_condition> 
    (5)  GROUP BY <group_by_list> 
    (6)  WITH {CUBE | ROLLUP} 
    (7)  HAVING <having_condition> 
    (10) ORDER BY <order_by_list> 索引與查詢結果無關,至於查詢速度有關