最近有好幾個朋友找小編詢問 WordPress 數據庫優化,以及刪除數據庫冗餘數據的方法,正好今天週五下午小編也沒課就抽時間寫一篇 WordPress 數據庫結構分析以及優化教程。首先我們要優化 WordPress 的數據庫就要了解清楚 WordPress 數據庫中每個表的作用。 (PS:下文均以默認數據表前綴 wp_為例,實際運用中請改成你自己數據表額前綴。)
(1)wp_commentmeta: 用於保存評論的元信息,在將評論放入回收站等操作時會將數據放入此表,Akismet 等插件也會生成此表的數據。此表不太重要。
(2)wp_comments: 用於保存評論信息的表。
(3)wp_links: 用於保存用户輸入到 WordPress 中的鏈接 (通過 Link Manager) 的表。
(4)wp_options: 用於保存 WordPress 相關設置、參數的表,裏麪包括了大量的重要信息。
(5)wp_postmeta: 用於保存文章的元信息 (meta) 的表。此表不太重要。
(6)wp_posts: 用於保存你所有的文章相關信息的表,非常的重要。一般它存儲的數據是最多的。
(7)wp_terms: 文章和鏈接分類以及文章的 tag 分類可以在表裏找到。
(8)wp_term_relationships: 日誌與 wp_terms 中的類別與標籤聯合起來共同存儲在 wp_terms_relationships 表中。類別相關鏈接也存儲在 wp_terms_relationships 中。
(9)wp_term_taxonomy: 該表格對 wp_terms 表中的條目分類 (類別、鏈接以及標籤) 進行説明。
(10)wp_usermeta : 用於保存用户元信息 (meta) 的表。
(11)wp_users: 用於保存 WordPress 用户信息的表。
一、 wp_options
首先來説下 wp_options 表的清理、優化。首先我們要清楚的是由於 wp_options 表是用於儲存 WordPress 系統設置,以及一些插件設置的表,所以一旦錯誤的刪除了一些表可能會造成需要重新登錄後台進行設置的情況,嚴重的時候可能會導致網站無法訪問。那麼如何安全的清理 wp_options 表呢?如果是比較熟悉 WordPress 數據庫結構的老鳥則可以手動刪除冗餘數據,新人推薦使用 clean options 插件進行清理。
二、 wp_posts
再來説説 wp_posts 表的清理吧,首先要知道 wp_posts 表是 WordPress 用來儲存文章數據的表,那麼我們在優清理 wp_posts 表時就必須瞭解 WordPress 中的幾種文章狀態:
1 、 pending:待審
2 、 draft:草稿
3 、 auto-draft:自動保存的草稿
4 、 inherit:修訂版本
5 、 trash:回收站
6 、 publish:已發佈
7 、 future:定時
8 、 private:私有
那麼瞭解了 WordPress 文章狀態後我們就可以用以下 SQL 查詢進行清理:
delete from wp_posts where (post_status='auto-draft' or post_status='inherit') and post_type='post'
以上 sql 查詢是用來刪除自動保存草稿以及定修版本的,如果需要刪除其他狀態的文章可以根據自己要求增加刪除或者修改以上 sql 查詢中的字段。
三、 wp_postmeta
wp_postmeta 表是用來儲存文章元信息的,多半是系統或者插件自動生成的,當然在主題使用了自定義字段是數據也是儲存在這個表裏的。
清理方法:
1 、刪除文章中不存在文章的元信息。
DELETE FROM wp_postmeta WHERE post_id NOT IN (SELECT post_id FROM wp_posts);
2 、刪除刪除_edit_lock 以及_edit_last 。
DELETE FROM wp_postmeta WHERE meta_key = 『_edit_lock』; DELETE FROM wp_postmeta WHERE meta_key = 『_edit_last』;
3 、在 WordPress 的後台上傳圖片或者附件後會在 wp_postmeta 中生成_wp_attached_file 和_wp_attachment_metadata 兩個項,wp_posts 也會記錄附件的信息。如果使用 FTP 工具上傳文件,表中就不會有這些信息。
清理語句:
DELETE FROM wp_postmeta WHERE meta_key = 『_wp_attached_file』; DELETE FROM wp_postmeta WHERE meta_key = 『_wp_attachment_metadata』;
其他表一般情況下是不會產生冗餘數據的,所以不要清理。 (PS:數據庫操作前請備份好數據庫以防萬一。)