2012-08-30 27 views
0

通过复杂的查询我的意思是你必须使用至少2个连接的查询。假设我已经构建了数据库的模式/模型。现在规定我有users.user_id = 5我要求logins.lastlogingroups.groupnamehistory.user_weight。我不会编写任何连接SQL语句,它们都将由数据库的模式/模型在后台连接。 MySQL有可能吗?是否可以使用MySQL的模型/架构来处理复杂的查询?

+0

使用观点:http://dev.mysql.com/doc/refman/5.5/en/create-view.html – Omesh

+0

@Omesh,但你必须写入查询到视图。为什么只是不使用它的视图?在和它是一样的正常的。 – ilhan

回答

1
+0

Noooo!首先它处理所有的数据,即使结果是一行。当你有300000行时,a **是痛苦的;它说“执行时间限制”。 – ilhan

+1

@george你是什么意思“处理所有数据”。正确编制索引的基表将确保对视图的查询具有良好的性能,而不是**执行全表扫描,与视图外JOIN相同。您是否真的在问MySQL是否可以“预加入”数据,Oracle物化视图? –

+0

@BrankoDimitrijevic,是的,我认为,MySQL自己编写的“pre-JOIN”。我不了解Oracle。 – ilhan

2

如果你不喜欢的意见想法 - 这,顺便说一句,是理想 - 你总是可以模仿做提到Oracle-materialized views布兰科:

创建INSERTDELETEUPDATE触发每个要加入的表,usersloginsgroups和的;这将更新一个新的名为lgh的第五个表(示例)

因此,您使用此新的lgh表进行上面的查询。它可能比实际视图减少扫描的行数,但每当原始4个表中的数据发生变化时,现在都会有开销。根据您使用这个新的lgh表的频率与更新其他4个表的不同,您可能会看到一些性能提升。

免责声明:

  • 我不纵容这种解决方法,它只是你的问题的其他建议。
  • 您应该真的考虑将更多索引添加到原始4个表中,而不是对于您在该连接查询中使用的每个列。
  • 这可能类似于“缓存”......它不是很完美。