对于 句子一:
先生成 v_user 视图,然后在 视图里 搜索 数据
 => 先组合两张 一千万的表,生成 一千万的条视图,再筛选;对于句子二:
现在 user 里筛选,然后 join user_info 的数据
 => 先从基本表的一千万条筛选出一条,再 合并;是这样的么?

解决方案 »

  1.   

    有没有可能 Sql 智能 地 把 where 语句 嵌入到 视图里:CREATE 
    ALGORITHM=UNDEFINED 
    DEFINER=`root`@`localhost` 
    SQL SECURITY DEFINER 
    VIEW `v_user`AS 
    SELECT
    `user`.user_id,
    `user`.user_name,
    `user`.pass_word,
    `user`.create_time,
    user_info.nick_name,
    user_info.email,
    user_info.last_upd_time
    FROM
    `user`
    INNER JOIN user_info ON user_info.user_id = `user`.user_id where `user`.user_id = 1;
    这样?
      

  2.   

    视图和直接执行sql语句效率基本相同
      

  3.   


    我这边的人说影响效率呀,我推敲一下,的确有点问题。如上面的表:
    user  数据量 1kw
    user_info 1kw
    v_user 1kwselect * from v_user where user_id = 1
    的时候:
    如果先 构造出视图,那么就会 取 user 和 user_info 表数据,构造一个 1kw 数据量的临时表 v_user,然后去 v_user 查询。肯定会比
    [code=sql]select user.*, user_info.nick_name from user inner join user_info on user.user_id = user_info.user_id where user.user_id = 1[coe]
    这样慢吧除非是像我后面说的,构造视图的时候 嵌入了 查询条件,真的是这样吗?我本来准备弄个 数据测试下的,在查循环的写法……
      

  4.   

    创建视图的效果比原生sql执行,效率上稍微低点吧。
      

  5.   

    如果视图中有不需要的表,则显然MYSQL在优化时需要多花一点儿时间。 比如视图是由 100 个表 join 而成。而只需要其中的某两个表与其它非视图中表进行JOIN,则显然MYSQL需要在上千种可能的执行方案中选择一个最经济的。