2012-01-08 43 views
0

我正在向一個非常大的數據庫(這意味着許多實體/表)發送查詢。 所以我有一些查詢,其中包括7至8個連接。 問題是,我不知道,表格在不久的將來會有多少條目。它可以在每個表格1000到100000行之間(甚至更多)。如何衡量多少個mysql連接帶來最佳性能?

我想分割我的查詢連續執行兩個或三個查詢,而不是一個超級查詢。

在MySQL查詢中有JOIN的常見/推薦限制嗎? 如何測量/計算哪種類型的分割將是一個很好的變體(取決於表中的行數等)?

我有很多JOIN在同一個表的同一個字段(外鍵)上。有沒有一種方法來優化呢? (在表中的一行 - 有很多朋友/連接)

感謝;)

UPDATE:

我看到了它爲時已晚。有人很好,並改變了問題的標題。 因爲我的英語不好,我寫了高性能 - 意思是表現良好。我的意思是執行! 請在您的答案中考慮這一點。再次感謝!

回答

2

你可能想了解一下EXPLAIN,它會告訴你MySQL執行查詢的計劃。例如

EXPLAIN SELECT foo FROM bar NATURAL JOIN baz 

會告訴你的MySQL將如何執行查詢SELECT FOO從酒吧自然連接巴茲

從EXPLAIN的結果,你可能會看到機會索引添加到數據庫中,這將有助於你的查詢,如果他們」重新緩慢,在某些情況下,您可能能夠向查詢添加提示,例如如果你有經驗知道這一點,告訴MySQL更喜歡一個索引。

一般而言,除非您的「分裂」實際上完全改變了需要執行的語義,否則試圖「分裂」一個查詢將毫無用處。例如如果您的查詢從數據庫中提取了六個不相關的東西,並且您將其重寫爲六個單獨的查詢,每個查詢獲取一件東西,那麼爲您的單獨查詢執行所花費的總時間可能並不會更好(並且可能會更糟糕)。

+0

我喜歡你的答案。我正在尋找某種共同的規則。你懂我的意思嗎? (請考慮我的更新) – helle 2012-01-09 07:47:11

+0

所以,你喜歡我的回答,但你已經標記爲不被接受,現在你想要一個「共同的規則」,而不是?你能舉一個你認爲「共同規則」是什麼樣子的例子嗎? – tialaramex 2012-01-09 09:50:39

+0

什麼。我無法用言語表達我的想法 - 不是用英語,而是用我的語言。所以我只是接受你的,因爲它仍然幫助我。 – helle 2012-01-09 10:27:59

1

使用'desc(query);'瞭解MySQL如何處理您的查詢。你通常比使用MySQL自己進行連接和優化更好。這就是它擅長的。

這也會告訴你索引在哪裏工作或需要增強。

+0

請考慮我的更新 – helle 2012-01-09 07:47:46