mysql - 有关 SQL RDMS 连接的优化/扩展用例

标签 mysql database optimization server

我正在创建一个平台,允许用户将页面保存在 AWS S3 存储桶上。该页面将列出尽可能多的静态信息,但我仍然需要该页面发出将触及我的服务器的查询(AJAX)。此查询可以从单个表中获取所需的所有信息,但有一个异常(exception),即全名。为此,我需要查询来加入第二个表。

我读到有关联接不是服务器密集型的内容,然后找到另一篇文章说它们是密集型的。如果这些查询被执行很多次,比如说数十万次,我是否应该在原始表中包含这个全名,这样我就不需要连接?根据上述指标,这会产生多少优化?

MYSQL 架构 -

TABLE: pet
pet_key, int, pk
pet_type_key, int
pet_name, varchar
color, varchar
weight, decimal
user_key

TABLE: user
user_key
full_name
email_address
password
<小时/>

我可以重新创建架构,这样我就不需要联接 -

TABLE: pet
pet_key, int, pk
pet_type_key, int
pet_name, varchar
color, varchar
weight, decimal
user_key
user_full_name, varchar // duplicate data, but faster to retrieve

TABLE: user
user_key
full_name
email_address
password

最佳答案

正如您的评论所表明的那样,您想得太多了。

关系数据库旨在组合来自多个表的数据,并且大多数数据库支持多种连接算法来实现此目的。

在您的情况下,您需要一个如下查询:

select *
from pets p join
     users u
     using (user_key);

您需要确保在 users(user_key) 上有索引。通常,该列将被声明为主键,这保证了该列上的索引。

您提出的复制数据的方法会带来其他问题。也许用户可以随着时间的推移更改他/她的名字。 pets 表的名称会不一致。另一个问题是存储。为什么要存储不必要的数据?

关于mysql - 有关 SQL RDMS 连接的优化/扩展用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38739107/

相关文章:

sql - 是否有任何缺点会阻碍您向表列添加索引?

algorithm - 计算整数中 1 的数量最有效的方法是什么?

mysql - SQL使用子查询从多个表中选择数据(包括来自内连接的数据)错误: 1242

php - Codeigniter - 使用 where 和 like 进行 MySQL 查询

mysql - Drupal 想要在将 Drupal 站点复制到子域后安装

php - 使两个表中的同一列始终具有相同的数据?

optimization - 表访问 vs 函数调用 + 条件判断 : which is faster?

c++ - 在 C++ 中,在不改变程序流程的情况下使用 'else' 对性能有何重要性?

mysql - 如何在 ionic 4 客户端应用程序和 Express 服务器之间建立连接?

PHP 从 AJAX post 获取数据并过滤它