2012-09-25 42 views
2

我有一個非常簡單的表格的MyISAM VS InnoDB的一個非常大的表

CREATE TABLE IF NOT EXISTS `largecache` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `tooltip` varchar(255) NOT NULL, 
    `name` varchar(100) NOT NULL, 
    `attributes` text NOT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `tooltip` (`tooltip`) 
) ENGINE=InnoDB 

擁有約8萬個條目,用於幾乎全部用於讀取。我試圖確保我儘可能快地訪問數據。我目前使用InnoDB,是否值得切換到MyISAM?我唯一關心的是讀取性能。還有其他的建議,我可以用來加快,因爲數據庫讀取幾乎是我的應用程序中唯一的瓶頸。

我正在使用MySQL客戶端版本:5.1.47

謝謝。

我使用的是PHP,而且我根據工具提示字段的精確匹配查詢。 它被託管在一個共享的VPS上,有1個ram,任何對mysql的調整我都可以嘗試,但我知道mysql調整是一個非常複雜的問題。

例子查詢:

select * from largecache where `tooltip` = "Cm8IuIyq9QMSBwgEFS0iGWAd30SUNR2EHJ0nHYYCY-odxZ6okR0pEnPgHWzQbvIiCwgBFXZCAwAYCCAiMAk4_gNAAEgPUBBg_gNqJQoMCAAQvKHZ5oCAgIA6EhUIrcC1xggSBwgEFUn1i18wCTgAQAEY2ojJgQxQAlgA" 

我已經安裝了APC,但不是memcached的

+0

沒有詳細信息,更有效的答案是「遷移到SSD併爲緩衝區安裝64GB內存」 – zerkms

+0

在細節方面仍然沒有任何用處。你執行什麼樣的查詢?是否有可能將結果緩存在memcached中?在所有8Gb的數據中 - 什麼是你經常選擇和罕見的分配? – zerkms

+0

我試着添加一些更多的細節,如果有什麼具體的東西會有用的讓我現在。 – Rob

回答

5

這將是件好事,你做準確的查詢。但根據你在這裏發佈的內容去 -

你打算做任何全文搜索(閱讀myISAM)?由於innodb執行的是行級別鎖定,而不是myISAM,它通過innodb的外觀進行表級鎖定,適合您的要求。使用innodb引擎嘗試以下操作 -

  1. 將一個索引放在tooltip字段中。
  2. 嘗試使用innodb config的disable transaction management。雖然這比寫更多。
  3. 嘗試increase the cache size for innodb。所有這些數據庫引擎都是內存吸盤,只要向它們扔更多的內存就可以了,突然它們表現不錯。
  4. 最後,我不能不提到memcached就結束這篇文章。這是一個分佈式緩存管理模塊&它與MySQL完美集成。這可以顯着提高您的讀取操作。

提供適當的鏈接。

選中此爲完整起見 - Why use InnoDB over MySIAM

+0

我添加了一個示例查詢。感謝您的信息。 – Rob

+0

知道了,因爲你使用'tooltip'來查找你的行,所以把這個列從這個列中索引出來,並把緩存放在多個級別上,緩存在innodb級別,緩存在memcached級別。 –

+0

對不起,這可能聽起來像一個愚蠢的問題,但對於#1,是一個索引需要,因爲我把它設置爲一個獨特的關鍵?我總是有這樣的印象嗎? – Rob

1

隨着5.1倍默認的InnoDB,萬物平等,你可能伊克甌從MyISAM的一個小的性能提升,如果適當調整了只基於您的有限信息。

我的建議是去5.5和innodb。

實際上,我們需要查看一些查詢以瞭解您如何訪問它。你有很多數(*)嗎?另外,如果你正在處理數百萬行的1G內存,可能有點緊 - 假設這不是你擁有的唯一表。無論您選擇哪種表格類型,這可能是您最大的問題。

+0

我添加了一個示例查詢,我做的唯一事情就是基於確切的'tooltip'匹配的查詢。 – Rob

+0

根據您的查詢示例,給予足夠的內存與香草mysql 5.1我會堅持使用MyISAM。 – Ray

0

似乎它在MyISAM方面更多。 作爲對「我可以用來加速」的任何其他建議,您可以實施全文搜索。