我正在创建一个平台,允许用户将页面保存在 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/