2011-02-25 184 views
3


我知道這個問題已經討論過很多次了。
但我在WordPress博客中有大型表的具體問題。
我有大約50K帖子,帖子超過100K。
進行搜索時,需要大量內存和cpu資源。
當前我使用MyISAM同時用於wp_posts和wp_posts_meta。
所以我想知道你的意見,我應該改變它到InnoDB?InnoDB vs MyISAM for large table Wordpress博客

我的vps上的WordPress博客主機有2GB內存和4個核心CPU,使用CentOS 5.我試圖優化MySQL配置以及使用數據庫緩存插件。

那麼InnoDB會解決我的問題嗎?如果之前有人問過,請原諒我。我只想知道你的專家意見。

感謝

伊萬

回答

2

您慢SELECT語句看到queryplan使用EXPLAIN。現在你可以猜測爲什麼事情慢了,吃掉了所有的記憶。你索引了正確的列嗎?你的SQL寫入是否正確?

當大部分活動是隻讀時,MyISAM應該沒問題。 MyISAM還爲您提供全文搜索,您可能需要在這種情況下進行搜索。 innoDB沒有全文搜索。

2

切換表類型不會加快任何搜索。 InnoDB只會在你遇到鎖定問題時提供幫助。由於博客數據變化不大,因此您不太可能鎖定問題。 這聽起來像是全文搜索的問題。我會尋找一個可以添加全文索引並使用該索引進行搜索的插件。

+0

是的,我會去那。有一個[用於WordPress的Sphinx插件](http://wordpress.org/extend/plugins/wordpress-sphinx-plugin/),專門用於在需要搜索的大型站點上使用備受推崇的Sphinx引擎來幫助實現這一目標。當然,你需要安裝Sphinx,但如果它是你自己的VPS,這應該不成問題。應該有一個CentOS套件。 – 2011-02-25 10:38:52

3

清除文章和頁面修訂版將大大減少WP數據庫的大小 - 在某些情況下可高達90% - 並帶來巨大的回報。

在phpmyadmin中作爲SQL查詢運行以刪除修訂;根據需要更改表前綴:

DELETE a,b,c FROM wp_posts a LEFT JOIN wp_term_relationships b ON (a.ID = b.object_id) LEFT JOIN wp_postmeta c ON (a.ID = c.post_id) WHERE a.post_type = 'revision'

然後優化所有表。然後添加

define ('WP_POST_REVISIONS', FALSE);

附近的wp-config.php文件的頂部,以禁用未來的修訂。