sql - View 在 DBM 中如何工作?

标签 sql mysql performance view

假设我有两个这样的表:

Employers (id, name, .... , deptId).
Depts(id, deptName, ...).

But Those data is not going to be modified so often and I want that a query like this

SELECT name, deptName FROM Employers, Depts 
    WHERE deptId = Depts.id AND Employers.id="ID"

尽可能快。

我想到了两种可能的解决方案:

  • 反规范化表:

    尽管使用这个解决方案我会失去一些“规范化数据库”的巨大优势,但这里的性能是必须的。

  • 为非规范化数据创建一个 View 。

    我将保持数据标准化(这是我的问题),在该 View 上的查询性能会比没有该 View 时更快。

或者以另一种方式提出相同的问题,每次您对 View 进行查询时, View 都会被“解释”,或者 View 在 DBA 中的工作原理是什么?

最佳答案

通常,除非您“具体化”一个 View ,这是某些软件(如 MS SQL Server)中的一个选项,否则该 View 只是转换为对基表的查询,因此不会比原始 View 更快或更慢(减去翻译查询所需的时间极少,与实际执行查询相比微不足道。

您怎么知道您遇到了性能问题?你在负载下分析它吗?确认性能瓶颈是这两张表了吗?通常,在您获得硬数据之前,不要假设您知道性能问题从何而来,也不要花任何时间进行优化,直到您知道您正在优化正确的事情 - 80% 的性能问题来自 20 % 的代码。

关于sql - View 在 DBM 中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/428175/

相关文章:

sql - 如何在 SQL (PostgresQL) 中将两列相减

mysql - 为 MySQL 重写 MS SQL 查询

javascript - 前端mysql,删除一行

c - 有效地从 6 个源文件填充两个 d 数组

mysql - 在 MySQL 上创建类型

mysql - 是否可以根据某些条件选择特定值?

java - 如何用java恢复备份文件(mysql)?

java - 同步方法与 block 的性能

javascript - 为什么 Array.forEach 比 Javascript 中的 for() 循环慢?

sql - Teradata SQL 中的多个连接 - 更快地使用子查询或临时表?