1.FROM
2.ON
3.JOIN
4.WHERE
5.GROUP BY
6.WITH CUBE or WITH ROLLUP
7.HAVING
8.SELECT
9.DISTINCT
10.ORDER BY
11.TOP
是这个顺序么,可是为什么explain的时候,row的行数是where之后的行数
explain显示的row是join前的row么

解决方案 »

  1.   

    暂时你可以这么理解,但是每一个步骤还是需要更详细的说明。 不太明白你的步骤描述,所以无法说对或者错。
    EXPLAIN是每个步骤后,得到的行数。
      

  2.   

     explain SELECT u.id FROM user_info AS u, user_friend AS uf WHERE 
    (uf.user_id = 1 AND uf.friend_id = u.id);| id | select_type | table | type   | possible_keys                  | key     | key_len | ref                | rows | Extra       |
    |  1 | SIMPLE      | uf    | ref    | PRIMARY,user_friend_friend_ref | PRIMARY | 4       | const              |    9 | Using where |
    |  1 | SIMPLE      | u     | eq_ref | PRIMARY                        | PRIMARY | 4       | uf.friend_id       |    1 |             |
    比如说这句,执行顺序是
    1.from u,uf
    2.on 哦,这里uf.user_id = 1放到on里了,所以出来的rows=9
    3.那explain出来 table u 的rows=1如何理解
    4.explain是显示join前的rows么
      

  3.   

    比如说这句,执行顺序是from uf    
    然后 user_id = 1 结果是   9 行
    再 查找 u 找符合条件 uf.friend_id = u.id 的记录。
      

  4.   

    谢谢,是如何联接和联接的次序
    也就是说explain的是join之前的
    1.from
    2.on
      

  5.   

    "FROM: LEFT TABLE and RIGHT TABLE的笛卡尔集,生成一个VT1,比如A有N条记录,B有M条,则VT1有N*M条记录"
    看某人的博客对from的解释,
    他的解释是否正确
    这样就是先join再判断on了