我目前正在编写我真正的第一个PHP应用程序,我想知道如何正确地项目/设计/实现MySQL视图;在MySQL中反观性能非规范化
在我的特殊情况下的用户数据分布在多台分散(如数据库规范化的结果),我想使用视图对数据进行分组到一个大表:
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应用程序中的视图数据很容易,但我不知道这会影响性能。
例如:
SELECT * from `Users_Merged` WHERE role = 'Admin';
是过滤视图的数据以正确的方式或者我应该过滤器之前创建视图本身? (我需要这个用户列表以及按角色过滤它们的功能)。
编辑
具体是什么我想要考取的是三个表的非规范化为一体。我的解决方案正确吗? See Denormalization on wikipedia
是的,用户角色是由设计脱节;事实是角色列只存在于这个视图中(我需要这个列进行过滤),我该如何索引它?我不确定这一点,但可以在MySQL中的视图有索引? – 2010-03-15 16:16:43
MySQL将使用TABLE上的索引来进行选择。一般来说,尝试去思考你的DBMS是一个错误。这些东西在引擎盖下非常复杂,所有简单的情况都已经过优化。只需索引可能的列,然后不必担心性能,除非你看到糟糕的表现。 – 2010-03-15 16:49:41
MySQL不优化视图,简单明了。您应该担心自己的观点,就像担心常规查询一样 - 不多也不少。 – 2010-03-15 17:45:53