视图 v :  select *  from a join b on a.id=b.id 
存储过程 p : select *  from a join b on a.id=b.id   where a.id=@id
nhibernate 
代码 
两种方法:
用视图  select * from v    where v.id=@id用存储过程 
哪种好些?是有了视图数据再筛选,还是用存储过程 直接建一条语句查找?其实我纠结在  select *  from a join b on a.id=b.id   where a.id=@id ,
一条语句,是先where ,还是先查询,或者一起的?

解决方案 »

  1.   

    视图与存储过程性能比较以你的这个V和P来说,效率上几乎相同。理论上视图会略快一点儿,(估计100个CPU周期以内)
      

  2.   


    MySQL会自行优化!会先 where
      

  3.   

    其实我纠结在  select *  from a join b on a.id=b.id  where a.id=@id , 
    一条语句,是先where ,还是先查询,或者一起的?执行顺序
    from ->join -> where ->select
      

  4.   

    如果有兴趣你可以参考一下手册中的解释。http://dev.mysql.com/doc/refman/5.1/zh/optimization.html#query-speed
    7.2. 优化SELECT语句和其它查询
    7.2.1. EXPLAIN语法(获取SELECT相关信息)
    7.2.2. 估计查询性能
    7.2.3. SELECT查询的速度
    7.2.4. MySQL怎样优化WHERE子句
    7.2.5. 范围优化
    7.2.6. 索引合并优化
    7.2.7. MySQL如何优化IS NULL
    7.2.8. MySQL如何优化DISTINCT
    7.2.9. MySQL如何优化LEFT JOIN和RIGHT JOIN
    7.2.10. MySQL如何优化嵌套Join
    7.2.11. MySQL如何简化外部联合
    7.2.12. MySQL如何优化ORDER BY
    7.2.13. MySQL如何优化GROUP BY
    7.2.14. MySQL如何优化LIMIT
    7.2.15. 如何避免表扫描
    7.2.16. INSERT语句的速度
    7.2.17. UPDATE语句的速度
    7.2.18. DELETE语句的速度
    7.2.19. 其它优化技巧
      

  5.   

    我不知道MYSQL如何, 
    在postgresql下,调用视图的语句与原试图语句能混在一起优化的,所以一般会where在查询。
    用存储过程的优点是,每个连接的第一次查询,会缓冲其查询计划,第二次查询速度就会快一点,这对比较复杂的查询是有好处的。
      

  6.   

    用explain SQL语句跟踪比较下看看吧