2012-08-30 30 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個表中,而不是對於您在該連接查詢中使用的每個列。
  • 這可能類似於「緩存」......它不是很完美。