内联 SQL 和从视图中选择的区别

Difference between inline SQL and selecting from view

PHP 和 MySQL 在 'building' 内联 SQL 语句(或 'hard-coding' 语句)和从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 实际上是相同的语句。

视图的性能很复杂。 MySQL 还没有其他 RDMS 的所有优化技巧来优化来自视图的查询。

例如,阅读此内容:http://www.percona.com/blog/2007/08/12/mysql-view-as-performance-troublemaker/它已过时,但可以让您了解问题所在。

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

如果不是,则它会创建一个包含视图的内部临时 table 类数据结构。 table 类数据结构 没有索引 ,因此必须将其作为一个整体来处理,以处理诸如 WHEREORDER BY 条款。这可能会损害您的表现。

不尝试就无法确定这些东西。您不仅应该在查询中使用 EXPLAIN,还应该实际测量它们的性能,以决定如何编写您的视图和查询以获得接受 table 性能。

最好的办法是让您的应用程序正常运行,然后对其进行优化。如果您足够幸运,可以扩大您的应用程序(获得大量用户和数据),随着您的 table 变得越来越大,您将需要重新审视优化。