php - 创建 View 还是使用 innerjoins?

标签 php mysql performance

我有一个规范化的数据库,外键/主键为一对多的数据库。

我计划使用 PHP 访问此数据库以进行基本的前端/后端显示。现在,我的问题来自这两个示例查询:

CREATE VIEW `view` AS
  SELECT
    functiondetails.Detail,
    functionnames.ID,
    functionnames.FunctionName,
    functionnames.Catogory
  FROM functiondetails
    INNER JOIN functionnames ON functiondetails.AsscID = functionnames.ID

SELECT
  functiondetails.Detail,
  functionnames.ID,
  functionnames.FunctionName,
  functionnames.Catogory
FROM functiondetails
  INNER JOIN functionnames ON functiondetails.AsscID = functionnames.ID

查询中没有错误,因为我已经成功运行了这两个查询,但我的总体问题是:

如果我计划不断从我的数据库中引用大量信息。创建一个 View 会不会更容易,然后它会一直使用新添加的信息进行更新,或者在我的实际 php 上进行第二个查询是否更好。示例:

$Query = $MySQli->prepare("
  SELECT
    functiondetails.Detail,
    functionnames.ID,
    functionnames.FunctionName,
    functionnames.Catogory
  FROM functiondetails
    INNER JOIN functionnames ON functiondetails.AsscID = functionnames.ID
")
$Query->execute();
$Results = $Query->fetch_results();
$Array = $Results->fetch_array(MYSQLI_ASSOC);

还是从我的观点中选择?

$Query = $MySQLi->prepare("SELECT * FROM `view`");
$Query->execute();
$Results = $Query->fetch_results();
$Array = $Results->fetch_array(MYSQLI_ASSOC);

那么,哪种方法更适合用于查询我的数据库?

最佳答案

Viewsabstraction layer创建抽象层的通常原因是为您提供一种工具,让您的生活更轻松。

使用 View 的一些重要优势包括:

  1. 安全
    您可以控制谁有权访问 View ,而无需授予他们访问基础表的权限。

  2. 澄清
    很多时候,列标题的描述性并不尽如人意。 View 可让您更加清晰地返回数据。

  3. 性能
    表现明智,观点不会对你造成负面伤害。但是,由于 MySQL 不支持 materialized views,因此使用 View 不会带来性能提升。 .

  4. 易于编码
    View 可用于重用复杂查询,减少用户出错的空间。

  5. 易于管理
    每当您的表架构发生变化时,它都会让您的生活更轻松。

    例如,假设您有一个包含待售房屋的表 homes_for_sale,但后来您决定希望该表处理您曾经有待售/目前有待售的所有房屋, all_homes。显然,新表的架构将与第一个大不相同。

    如果您有大量来自 homes_for_sale 的查询,现在您必须检查所有代码并更新所有查询。这会让您面临用户错误和管理噩梦。

    解决更改的更好方法是用同名 View 替换表。该 View 将返回与原始表完全相同的架构,即使实际架构已更改。然后,如果需要,您可以按照自己的节奏检查代码,并更新查询调用。

关于php - 创建 View 还是使用 innerjoins?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18443543/

相关文章:

php - 一起显示当天的事件(PHP/MYSQL)

php - 从mysql打印数据

php - MySQL/PHP : Database Layout, 排序和搜索

Java PreparedStatement SQL语法错误

php - 如何避免 Heredoc SQL 语句

java - Intellij IDEA在 Debug模式下很慢,在正常模式下运行完美

php - AJAX "load more"按钮 : disappears once clicked 问题

php - mysql错误缺少参数和字符串

javascript - 性能方面——canvas vs base URI vs image

javascript - 监控特定的 js 事件以及作为自动化测试的一部分执行它们所花费的时间?