数据库
首页 > 数据库> > 在MySQL中查看非规范化的性能

在MySQL中查看非规范化的性能

作者:互联网

我目前正在编写我真正的第一个PHP应用程序,我想知道如何正确地投影/设计/实现MySQL视图;

在我的特定情况下,用户数据分布在几个表中(作为数据库规范化的结果),我想使用View将数据分组到一个大表中:

CREATE VIEW `Users_Merged` (
name,
surname,
email,
phone,
role
) AS (
SELECT name, surname, email, phone, 'Customer'
FROM `Customer`
)
UNION (

SELECT name, surname, email, tel, 'Admin'
FROM `Administrator`
)
UNION (

SELECT name, surname, email, tel, 'Manager'
FROM `manager`
);

这样我可以轻松地使用来自PHP应用程序的View数据,但我真的不知道这会影响性能.

例如:

SELECT * from `Users_Merged` WHERE role = 'Admin';

是过滤视图数据的正确方法还是应该在创建视图本身之前过滤?
(我需要这个有一个用户列表和按角色过滤它们的功能).

编辑

具体来说,我想要获得的是将三个表的非规范化合二为一.我的解决方案是否正确
See Denormalization on wikipedia

解决方法:

通常,数据库引擎将为您执行优化.这意味着引擎将在连接到其他表之前确定需要过滤users表.

因此,继续使用您的视图,让数据库担心它.

如果您以后检测到性能不佳,请使用MySQL EXPLAIN让MySQL告诉您它正在做什么.

PS:您的数据设计只允许每个用户一个角色,这是您想要的吗?如果是这样,并且您提供的示例查询是您打算经常运行的查询,请确保将用户的角色列编入索引.

标签:mysql,database-design,performance,denormalization
来源: https://codeday.me/bug/20190627/1300498.html