2012-09-03 95 views
0

我使用的有20多萬條記錄的表並運行查詢之後,走的時間顯著量。我可以有一個定義或語句,說如果序列號達到一百萬做一個分區名稱預定義命名語法如table_name_i我繼續增加。自動分區MySQL中的表達一百萬條記錄

表定義是象下面這樣:

Table name - CHIP_DETAILS 
Columns - 
    SEQ_NO - INT(10) - Auto Increment 
    CHIP_ID - Varchar(16) 
    TOKEN - VARCHAR(16) 
    CHIP_BLOB (TINY BLOB) 
    TOKEN BLOB (TINY BLOB) 
    GENERATED_TIMESTAMP - TIMESTAMP 
    USER_ID - INT(10) 

MYSQL version - MySQL server 5.5.23 
OS - Windows 7 Home Premium - 64 Bit 
RAM - 8 Gigs 
Processor - Intel i5 2.53 

任何幫助不勝感激。

+1

我怎麼看不到分區表到多個表是要提高性能,除非你可以在不同的硬件分發這些表,像不同的服務器或至少diferent硬盤。至少如果你的查詢需要在整個表上操作。如果表中只有一小部分對於大多數查詢是足夠的,那麼確定描述該部分的標準可能比簡單地在任意點分裂更好。 – MvG

+0

@MvG - 我需要查詢整個表格,分割數據會比查看百萬條記錄的速度快得多,這就是我的想法。可能是我被分區這個詞誤導了,但很想聽聽任何能夠幫助我更快執行查詢的技術或技巧。 – Sirish

回答

0

如果你的分區表入裏說ň不同的表,那麼他們每個人將只包含一個ň個數據,所以你可以期待的查詢達的因素要快n。但對於其必須處理所有數據的查詢,則需要在每個ň表的操作,這意味着你必須ň這樣的質疑。在最好的情況下,這會讓你回到原來的表現。在實踐中,準備執行查詢所需的持續開銷將被執行n次而不是一次,因此幾乎肯定會降低性能。

數據庫引擎通常都設計有大量的數據,以應付得很好,和20萬條記錄,是不是真的那麼多。所以手動重新分配數據不太可能有幫助。相反,您應該檢查以確保您有suitable indices只訪問您實際需要訪問的那些數據庫部分。這個表格可能真的很大,但只要你只訪問它的一小部分,你的查詢仍然會很快。查看EXPLAIN命令的輸出,查看您認爲太慢的查詢之一,以查看可能需要其他索引的位置。例如Rewriting the queries,例如爲了更好地利用這些指標,可能也會有所幫助。 Optimizing a database是一個複雜的主題,需要更多關於你實際嘗試做什麼的知識。一個重要的信息是讀取和寫入之間的比率。

正如我在上面的評論中寫道,區分你的表纔有意義,如果你可以放置在不同的硬盤上的不同部分,使他們可以並行訪問。在這種情況下,您需要探索MySQL partitioning features以便讓MySQL以最大限度地利用並行訪問的方式進行拆分。

0

分區的表應該經由列值來完成,例如日期。如果你在每個分區中放置了一個月的數據,一個只包含2個月數據的查詢(這需要在查詢的過濾器中明確表示),優化程序只需要包含2個分區,結果。除非您在數據中的列上進行分區(例如每月),並且使用任意非基於數據的分區鍵(如row_id),那麼優化器將如何知道哪些分區需要回答該查詢所在的數據?它必須引用所有分區,然後將所有數據重新拼接在一起 - 使查詢速度比沒有分區時慢。