2013-05-25 28 views
-1

大家好我有這樣的問題。 我已經下載並激活了我的筆記本電腦上的Mysql,這是一個普通的筆記本電腦,然後我使用GUI,我正在學習如何使用Mysql。 我其實是在一開始,所以現在我正在導入表格(採用csv格式),並試圖在我們的ms access中運行相同的查詢。 關鍵是,一方的Mysql似乎保留了任何類型的表維度,但另一方面卻極其緩慢。其實這麼慢我相信我一定會做錯事。 我有兩個表,其中每一個1400000行和70列:如果我對他們每個運行基本查詢(例如選擇字段A1是'23「的所有行),然後沒有問題 但如果我運行在兩個表之間有一個(內部?)連接的查詢,那麼這是一場災難。 我在6小時前開始處理這樣的查詢,它仍然會......同樣的查詢在ms訪問中花了15秒。我敢肯定,我一定是失去了一些東西 操作系統是Ubuntu的12.10,圖形用戶界面是Navicat的11 謝謝我的筆記本電腦上的Mysql查詢速度極其緩慢

+0

您可以發佈您的數據樣本和您正在使用的查詢嗎?這聽起來像你的查詢可能有問題。 您也可以在查詢之前使用EXPLAIN查看可能出錯的位置。 – 79IT

+0

在說明中加上Explain作爲查詢的前綴選擇*從表中,它會告訴你mysql如何處理查詢。將輸出添加到您的問題。你已經在mysql中添加了主鍵和索引? –

+0

接下來是查詢,GUI告訴我查詢正在處理。我的表沒有索引,我認爲沒有主鍵(沒有字段選作主鍵)謝謝;這些字段是varchar,除了兩個是date;查詢:[SQL] SELECT 'CCA 1'.'RAPPORTI TIPO INFO 1'.A03, 'CCA 1'.RAPPORTI TIPO INFO 2'.A03 FROM 'CCA 1'.RAPTIFI INFO 1' INNER JOIN'CCA 1'''RAPPORTITIO INFO 2' ON'CCA 1'.'RAPPORTIIPO INFO 1'.A03 ='CCA 1'.RAPPORTIIPO INFO 2'.A03 – user1951561

回答

1

的MySQL基本上只支持兩種連接算法。 - 索引搜索和嵌套循環嵌套的循環基本手段MySQL從第一張表中讀取一行,然後從第二張表中讀取所有行,然後再讀取一行第一個表中的w和第二個表中的所有行。等等。 (實際上,該算法確實阻止了讀取,所以它不是那麼糟糕,但你明白了。)

當你有大表時,嵌套循環是一個相當差的選擇。其他數據庫支持散列連接算法和合並連接算法等,但這些不是一種選擇。

我猜你的兩張桌子太大,不適合記憶。這會導致最差的性能,因爲SQL引擎必須從第一個表中的每行(或一批行)讀取磁盤上的所有記錄。

您可以通過在列上構建索引來解決此問題。這應該會大大提高性能。

您也可以調查內存參數。該文檔是here。確保你正在爲sql引擎分配足夠的內存。