2011-11-05 74 views
0

我有我的mysql查詢perfomance問題。我有一個非常大的桌子不好的MySQL性能很簡單select

create table query(
    id Integer, 
    session Integer, 
    time Integer, 
    name Integer, 
    region Integer); 

數據量 - 2 gb。我在「名稱」 - 7 GB上做了索引。

我的查詢是這樣的:

select count(id) from query where name=somevalue; 

我不會添加任何新的數據,而我使用的標準「我-huge.cnf」。儘管如此,我花費了大約4-5秒的時間查詢,我將要做大約9-10 * 45000個查詢。如果我的電腦有2GB內存,應該更改哪些選項以提高速度。

+1

更多RAM是您可能需要的。 – ceejayoz

+2

您的數據爲2GB,但表格中某列的索引爲7GB?沒有意義... –

+0

你使用哪種引擎(inno,myisam等)?同時有多少個並行查詢? –

回答

2

計數(*)的運行速度可能稍快。

select count(*) as rowcount from query where name=somevalue; 

另外,您可能會考慮將計數緩存到單獨的表中並從中進行查詢。

+0

非常感謝,它真的幫助。但是我計劃在將來做一些更復雜的查詢,所以我不得不增加某種緩衝區。但你剛剛救了我3-4天的處理。 – epahomov

2

如果您從未更改過數據,那麼您應該考慮針對所有可能的名稱運行查詢(SELECT DISTINCT(name) FROM query)一次,然後將值COUNT()存儲在緩存中。爲此,您可以創建一個表cache,其中nametotal爲列,併爲每個名稱填充運行SELECT name, COUNT(*) AS total FROM query WHERE name = 'name'的結果。

然後你會簡單地SELECT total FROM cache WHERE name = 'name',這將是非常快的。

+0

如果問題是獲得多次計數信息,這將有所幫助。我想在第一次收集信息時加快速度。作爲我想要使用更大的緩衝區的方式。 – epahomov