如题,视图支持索引吗?如果不支持索引那可得不偿失了。

解决方案 »

  1.   

    以查询SELECT语句的索引使用方法相同。没有差别。你可以explain 一下看看。
    mysql> create view v_t1 as select * from t1 where id<100;
    Query OK, 0 rows affected (0.56 sec)mysql> explain select * from t1 where id<100;
    +----+-------------+-------+-------+---------------+---------+---------+------+-
    -----+-------------+
    | id | select_type | table | type  | possible_keys | key     | key_len | ref  |
    rows | Extra       |
    +----+-------------+-------+-------+---------------+---------+---------+------+-
    -----+-------------+
    |  1 | SIMPLE      | t1    | range | PRIMARY       | PRIMARY | 4       | NULL |
      98 | Using where |
    +----+-------------+-------+-------+---------------+---------+---------+------+-
    -----+-------------+
    1 row in set (0.05 sec)mysql> explain select * from v_t1;
    +----+-------------+-------+-------+---------------+---------+---------+------+-
    -----+-------------+
    | id | select_type | table | type  | possible_keys | key     | key_len | ref  |
    rows | Extra       |
    +----+-------------+-------+-------+---------------+---------+---------+------+-
    -----+-------------+
    |  1 | SIMPLE      | t1    | range | PRIMARY       | PRIMARY | 4       | NULL |
      98 | Using where |
    +----+-------------+-------+-------+---------------+---------+---------+------+-
    -----+-------------+
    1 row in set (0.00 sec)mysql>
      

  2.   

    mysql 的视图是没有索引的,除非是merge算法的视图,merge算法的视图一句话讲不清楚,基本可以理解mysql的视图用不到基本表的索引。