最近有好幾個朋友找小編詢問 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:資料庫操作前請備份好資料庫以防萬一。)