内联 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 类数据结构 没有索引 ,因此必须将其作为一个整体来处理,以处理诸如 WHERE
和 ORDER BY
条款。这可能会损害您的表现。
不尝试就无法确定这些东西。您不仅应该在查询中使用 EXPLAIN
,还应该实际测量它们的性能,以决定如何编写您的视图和查询以获得接受 table 性能。
最好的办法是让您的应用程序正常运行,然后对其进行优化。如果您足够幸运,可以扩大您的应用程序(获得大量用户和数据),随着您的 table 变得越来越大,您将需要重新审视优化。
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 类数据结构 没有索引 ,因此必须将其作为一个整体来处理,以处理诸如 WHERE
和 ORDER BY
条款。这可能会损害您的表现。
不尝试就无法确定这些东西。您不仅应该在查询中使用 EXPLAIN
,还应该实际测量它们的性能,以决定如何编写您的视图和查询以获得接受 table 性能。
最好的办法是让您的应用程序正常运行,然后对其进行优化。如果您足够幸运,可以扩大您的应用程序(获得大量用户和数据),随着您的 table 变得越来越大,您将需要重新审视优化。