Dar*_*ill 12 php mysql performance
我有一个规范化的数据库,外键/主键提供一个到多个数据库.
我打算用PHP访问这个数据库,用于基本的前端/后端显示.现在,我的问题来自这两个示例查询:
CREATE VIEW `view` AS
SELECT
functiondetails.Detail,
functionnames.ID,
functionnames.FunctionName,
functionnames.Catogory
FROM functiondetails
INNER JOIN functionnames ON functiondetails.AsscID = functionnames.ID
Run Code Online (Sandbox Code Playgroud)
要么
SELECT
functiondetails.Detail,
functionnames.ID,
functionnames.FunctionName,
functionnames.Catogory
FROM functiondetails
INNER JOIN functionnames ON functiondetails.AsscID = functionnames.ID
Run Code Online (Sandbox Code Playgroud)
查询中没有错误,因为我已经两次都没有失败,但我的整体问题是:
如果我打算经常从我的数据库中引用很多信息.是不是更容易创建一个视图,然后使用新添加的信息一直更新,或者更好的做法是在我的实际php上进行第二次查询.示例:
$Query = $MySQli->prepare("
SELECT
functiondetails.Detail,
functionnames.ID,
functionnames.FunctionName,
functionnames.Catogory
FROM functiondetails
INNER JOIN functionnames ON functiondetails.AsscID = functionnames.ID
")
$Query->execute();
$Results = $Query->fetch_results();
$Array = $Results->fetch_array(MYSQLI_ASSOC);
Run Code Online (Sandbox Code Playgroud)
或者从我的视图中选择?
$Query = $MySQLi->prepare("SELECT * FROM `view`");
$Query->execute();
$Results = $Query->fetch_results();
$Array = $Results->fetch_array(MYSQLI_ASSOC);
Run Code Online (Sandbox Code Playgroud)
那么哪一个用于查询我的数据库会更好?
视图是一个抽象层,创建抽象层的通常原因是为您提供一种工具,使您的生活更轻松.
使用视图的一些重大优势包括:
安全性
您可以控制谁有权访问,而无需授予他们访问基础表的权限.
澄清
通常,列标题不像它们那样具有描述性.视图允许您为返回的数据添加清晰度.
性能
表现明智,观点不会对您产生负面影响.但是,由于MySQL不支持物化视图,因此您不会通过使用视图来获得性能提升.
易于编码
视图可用于重用复杂查询,减少用户错误的空间.
易于管理
只要表格架构发生变化,您的生活就会变得更轻松.
例如,假设你有一个包含你有待售房屋的表,homes_for_sale但后来你决定要该表来处理你曾经出售所有家庭/对目前出售all_homes.显然,新表的模式与第一个模式有很大不同.
如果您有大量的查询homes_for_sale,现在您必须浏览所有代码并更新所有查询.这将打开您的用户错误和管理噩梦.
解决更改的更好方法是使用相同名称的视图替换表.该视图将返回与原始表完全相同的模式,即使实际模式已更改.然后,如果需要,您可以按照自己的进度浏览代码,并更新查询调用.
如果满足以下条件,则最好创建视图:
您可能假设MySQL将视图的结果存储在某处,并且随着基础表中的数据更改而导致更新.MySQL没有这样做.查询视图与运行查询完全一样.
但它甚至可能比运行裸SQL查询更糟糕,因为MySQL可能会在临时表中累积基本查询的结果,因此您可以在查询中使用更多SQL子句来查看视图.我说"可能"因为它因视图算法而异.
有关MySQL如何使用"合并"算法或"temptable"算法执行视图的说明,请参阅http://dev.mysql.com/doc/refman/5.6/en/view-algorithms.html.
如果你想要物化视图,那么有一个名为FlexViews的工具可以维护物化视图:
Flexviews是MySQL的物化视图实现.它包含一个简单的API,用于创建实体化视图并刷新它们.使用Flexviews的优点是物化视图可以逐步刷新,也就是说,通过使用记录数据库表更改的特殊日志有效地更新视图.Flexviews包括创建和维护这些日志的工具.Flexviews创建的视图包括对JOIN和所有主要聚合函数的支持.