内联SQL与从视图中选择之间的区别

时间:2015-01-21 13:50:10

标签: php mysql sql mysqli

在构建'之间,PHP和MySQL之间是否存在显着的性能差异?内联的SQL语句(或者'硬编码'它)并从MySQL视图中选择?

例如:

$sql = "SELECT `table1`.`field1`,`table1`.`field2`,`table2`.`field1`,`table2`.`field2` 
        FROM `table1` 
            RIGHT JOIN `table2` On `table1`.`field1` = `table2`.`field1`;";

$sql = "SELECT * FROM `view1`;";

其中view1实际上是同一个陈述。

1 个答案:

答案 0 :(得分:2)

观点的表现很复杂。 MySQL还没有其他RDMS的所有优化技巧来优化来自视图的查询。

例如,请阅读:http://www.percona.com/blog/2007/08/12/mysql-view-as-performance-troublemaker/它已过时,但会让您了解问题。

如果MySQL可以使用查询合并处理您的视图 - 也就是说,通过内部扩展您的查询以便将视图的逻辑嵌入其中 - 它将能够优化它,就像您将视图逻辑写入查询。对于您的问题中的示例,这可能是正确的。在这种情况下,使用视图的成本很小或为零。

如果没有,那么它会创建一个包含视图的内部临时表类数据结构。那个类似于表的数据结构没有索引,所以它必须作为一个整体处理来处理诸如WHEREORDER BY子句之类的事情。这可能会损害您的表现。

没有尝试就无法找到这些东西。您不仅应该在查询中使用EXPLAIN,还应该实际衡量其效果,以便决定如何编写视图和查询以获得可接受的性能。

最好的办法是让您的应用程序正常运行,然后对其进行优化。如果您足够幸运,您的应用程序可以扩展(获得大量用户和数据),您需要重新访问优化,因为您的表越来越大。