2012-09-05 213 views
2

我有具有以下結構的表格:MySQL的瓶頸

ID, SourceID, EventId, Starttime, Stoptime 

所有的ID列是CHAR(36)和所述時間日期。

問題是查詢表非常慢。我有7萬行,我大約有60-70個線程一直在寫表(插入或更新)到表中。

另一方面,我有需要從這張表中讀取的圖形用戶界面,它在這裏變得很慢。如果我想選擇所有已製作的事件where SourceID = something,則需要將近300秒。 SourceID有一個索引。我採取相同的查詢,並把解釋關鍵字首先我得到了這個。

select type = simple 
type = ref 
possible_keys = sourceidnevent,sourceid 
key = soruceid 
key_len = 109 
ref = const 
rows = 84148 

和查詢

SELECT * FROM tabel where sourceid='28B791C7-D519-4F0C-BC03-EFB1D4AC9CEB' 

不過,我開始思考什麼呢我真的從表中所需要的。我想知道哪個事件發生在哪個服務器上,以及哪個事件發生在服務器上,按日期排序。我已經添加了所有組合的索引,其中使用,使用命令。

我需要所有的行因爲我想對他們做一些計算,一些分組,avarage等。但是我在.NET環境中做了這件事,因爲它提出了很多問題。

但是,如果我添加一個限制選擇它會更快。那麼轉移的數據量的瓶頸是什麼,而不是在查找/選擇部分?如果是這樣,我可以重建我的應用程序以僅在一天內完成計算並將結果保存到另一個表中,然後將其全部彙總。

我該如何加快處理速度?切換到MongoDB會更好嗎?我目前使用MySQL和InnoDB。

+0

它可以被緩存15分鐘。但我想指出的是,UI最快反應速度很快,即使它第一次訪問數據,所以我不知道如何緩存它,除非預先加載UI層中的所有內容。 –

+0

從這個問題中我們不清楚哪些索引是可用的,哪些查詢正在返回,DBMS如何調優,操作系統的運行方式,它所在的文件系統,操作系統如何調優,爲什麼'id'字段是varchar,只有有限的訪問爭用信息。 – symcbean

+0

我更新了問題: 如果我爲選擇添加限制,它會更快。那麼轉移的數據量是否是瓶頸呢?如果是這樣,我可以重建我的應用程序以僅在一天內完成計算並將結果保存到另一個表中,然後將其全部彙總。 –

回答

0

有很多您沒有提供的信息 - 其中一些我在其他地方的評論中提到過。

在單個節點上,NoSQL不可能比MySQL快得多。如果它比在MySQL上使用handler API以及適當的索引更快,我會感到非常驚訝。

你提供一個解釋計劃的一部分(但不是被解釋查詢) - 但你沒有提供任何這解釋:

行數= 84148

它真的需要處理那麼多行以提供您需要的結果?如果是這樣,並且結果未彙總,那麼您可能需要考慮爲什麼需要將80k行數據發送到前端。如果只需要返回一些非聚合行,那麼你確實需要分析索引。

我已經加入索引的所有組合

太多的指標僅僅是表現太少一樣糟糕。