Java开源 | PHP开源 | .NET开源 | Android | Linux操作系统 | Ajax | jQuery插件 | Web服务器 | 开发工具 | Web Service | 可视化HTML编辑器 | 常用JS库 | 开源手机软件
讨论区首页 » 开源软件交流 » MySQL » [转] mysql 视图性能 算法选择
转帖:

[转] mysql 视图性能 算法选择

作 者话 题 正 文

MySQL在处理视图时有两种算法,分别称为MERGE和TEMPTABLE。在执行"CREATE VIEW"语句时可以指定使用哪种算法。所谓MERGE是指在处理涉及到视图的操作时,将对视图的操作根据视图的定义进行展开,有点类似于C语言中的宏展开。
一般来说在能够使用MERGE算法的时候MySQL处理视图上没什么性能问题,但并非在任何时候都能使用MERGE算法。事实上,只要视图的定义稍稍有点复杂,MySQL就没办法使用MERGE算法了。准确的说,只要视图定义中使用了以下SQL构造块就无法使用MERGE算法:

    * 聚集函数
    * DISTINCT
    * GROUP BY
    * HAVING
    * 集合操作(在MySQL中只有UNION, UNION ALL,没有EXCEPT和INTERSECT)
    * 子查询

        确实,在视图定义比较复杂的情况下,要对视图操作进行有效的优化是非常困难的。因此在这个时候,MySQL使用了一种以不变应万变的方法,即先执行视图定义,将其结果使用临时表保存起来,这样后续对视图的操作就转化为对临时表的操作。不能不说从单从软件设计的角度看,这样的方法非常的优雅,然而从性能角度,这一方法也是非常的差。

返回顶部 回复此话题 | 关注此话题
如果您尚未登录,点击此按钮将会提示登录界面