2011-12-05 50 views
2

我有一張表格,其中有大約100萬行(物理磁盤上的大小接近8 GB,因爲它有一個文本列),這會佔用大量時間用於任何事務。特別是對於「選擇」,需要花費很多時間。計數查詢無需任何條件大約需要20分鐘,即select count(*) from TestPerformance查詢MySQL中的巨大表格

表模式是:

名稱:TestPerformance

Field  Type Null Key  Default  Extra 

ID  int(11)  NO PRI  null  
TEXT  text  YES   null  
CATEGORY varchar(100) YES  MUL  null  
DDOMAIN  varchar(100) YES   null  
NETWORK  varchar(100) YES   null  
NODE  varchar(100) YES   null  
ENTITY  varchar(100) YES  MUL  null  
SEVERITY int(11)  YES   null  
TTIME  bigint(20) YES   null  
SOURCE  varchar(255) NO MUL  null  
HELPURL  varchar(100) YES   null  
WEBNMS  varchar(100) YES   null  
GROUPNAME varchar(100) YES   null  
OWNERNAME varchar(25)  NO PRI  null  

和索引

Table   Non_unique Key_name  Seq_in_index Column_name  
TestPerformance  0  PRIMARY   1  ID  
TestPerformance  0  PRIMARY   2  OWNERNAME 
TestPerformance  1  TestPerformance0_ndx 1  ID  
TestPerformance  1  TestPerformance1_ndx 1  OWNERNAME 
TestPerformance  1  TestPerformance_ndx  1  CATEGORY  
TestPerformance  1  TestPerformance_ndx  2  SOURCE  
TestPerformance  1  TestPerformance_ndx1 1  ENTITY  
TestPerformance  1  TestPerformance_ndx2 1  SOURCE 

我已經調整key_buffer大小爲1 GB,但沒有在性能上變化。

如何在不刪除任何數據的情況下加快此表的交易?

我不是數據庫專家。請提供您的建議以改善表格的性能。

+1

您沒有向我們顯示導致問題的查詢。 –

+0

使用mysqldump查找需要很長時間的查詢。 – vikky

+0

'SELECT count(id)FROM TestPerformance'花費很長時間嗎?只選擇你需要的字段。 –

回答

3

如何在不刪除任何數據的情況下加快此表的交易?

100萬行是不是很多數據。 8Gb是相當數量的數據。

將文本類型列移動到sperate表(1:1關係)。將這些varchar表的大小減小到保存數據所需的最小大小(或考慮將您不需要過濾的任何內容移動到另一個表中)。

您是否真的需要ID 主鍵的所有者名?我懷疑id可能是唯一的。如果是這樣,則失去TestPerformance0_ndx - 這是多餘的。事實上,您應該開始分析您的日誌,並查看DBMS實際需要哪些索引來爲查詢提供服務並相應地修改架構

+0

感謝您的意見,根據您的建議我刪除了TestPerformance0_ndx和TestPerformance1_ndx。我可以看到桌子的尺寸從8GB降到6GB。我必須檢查它是否有助於提高性能。 –

1

對您的查詢運行EXPLAIN(您應該發佈給我們看)。這將有助於確定您的查詢嘗試使用哪些索引以及哪些列正在使用全表掃描。

此外,不要做select count *,而是計算您的主要recid,以便它可以使用您的索引進行計數。

+0

@ davidethell解釋select * from事件來源= 1000和category = 10; ID | select_type |表| |鍵入| possible_keys |鍵| key_len | ref |行|額外 1 | SIMPLE |活動| ALL | Event_ndx,Event_ndx2 | NULL | NULL | NULL | 808515 |使用 –

+0

@ramachandran你得到了一個全表掃描,你可以從類型下的ALL解釋結果中看到。你有一個關於源和類別的索引,所以你應該得到一些幫助。你最近是否做過分析表以確保指數是最新的? – davidethell