我的應用程序中有一種情況。對於圖表中的每個x軸點,我繪製了5個y軸值。要計算這5個值中的每一個,我需要進行4個不同的查詢。也就是說,對於每個x軸點,我需要激發20個sql查詢。MySql multiple選擇批處理.net
現在,我需要在我的圖表中繪製40個這樣的點。它導致了一個可悲的表現,從數據庫中獲取所有數據需要花費將近一分鐘的時間。 4個不同的查詢中的每一個都由2個表之間的連接組成。一個只有6行。另一個接近10,000。 4個查詢中的每一個都有不同的WHERE子句,因此它們是不同的查詢。對於x軸中的每個點,只有where子句的值發生更改。
我已經嘗試將每個4個查詢合併成一個大字符串。基本上批量四個選擇。這些再次按每個y軸值進行批處理。 因此,對於每個x軸點,我現在發射一個由20個不同的選擇語句組成的大命令。
從技術上講,我應該會經歷一個很大的性能提升,對吧?而不是擊中db 40x5x4 = 800次,我現在只擊中了40次。但不是花60秒,而是花50-55秒......沒有什麼幫助。
我正在使用MySql 5.1和它的.Net連接器的6.1版本。
我該怎麼做才能提高性能?
編輯:
其中4個查詢如下:
SELECT
SUM(TIME_TO_SEC(TIMEDIFF(T1.col2, T1.col1))* T2.col1/(3600 *1000)) AS TotalTime
FROM Table T1
JOIN Table T2
ON T1.col3 = T2.col3
WHERE T1.col4 = 'i'
AND T1.col1 >= '2009-12-25 00:00:00'
AND T1.col2 <= '2009-12-26 00:00:00';
其他3個查詢是類似的,只是where子句稍有變化。這組4個查詢被激發5次。前三次對錶T1和T2的連接,傳入col4的不同值。接下來的兩次針對表T3和T2的加入,爲col4傳遞不同的值。這5個值是特定x軸點的y軸值。
所有這些查詢返回的數據都是相同的格式。所以,我們嘗試在所有這些查詢中進行UNION ALL。沒有實質性差異。然而,一個奇怪的事情是,在對錶T1上的外鍵進行索引後(雖然它包含了一個十萬條記錄),查詢使用索引,但是它們變慢了。有時候,查詢會花費雙倍的時間來返回數據。
您確定瓶頸在創建連接並通過電線獲取數據嗎?也許查詢本身需要時間,你需要優化它們? – Oded 2010-02-05 11:42:57
@Oded,我認爲我們已經通過將查詢合併爲一個來消除創建連接/獲取數據瓶頸。所以,是的,查詢本身需要時間,我正在尋找如何優化它們的幫助:) – 2010-02-10 05:17:40