gpt4 book ai didi

mysql - 查看 MySQL 中的非规范化性能

转载 作者:可可西里 更新时间:2023-11-01 07:33:50 26 4
gpt4 key购买 nike

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

在我的特殊情况下,用户数据分布在多个表中(由于数据库规范化),我正在考虑使用 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';

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

编辑

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

最佳答案

一般来说,数据库引擎会为你进行优化。这意味着引擎将确定用户表需要在连接到其他表之前进行过滤。

所以,继续使用您的 View ,让数据库来操心吧。

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

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

关于mysql - 查看 MySQL 中的非规范化性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2448347/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com