十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
一、數(shù)據(jù)庫表清理
站在用戶的角度思考問題,與客戶深入溝通,找到金安網(wǎng)站設(shè)計(jì)與金安網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗(yàn)好的作品,建站類型包括:網(wǎng)站設(shè)計(jì)制作、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、空間域名、虛擬空間、企業(yè)郵箱。業(yè)務(wù)覆蓋金安地區(qū)。
1. wordpress數(shù)據(jù)庫表
wp_commentmeta: 用于保存評論的元信息,在將評論放入回收站等操作時(shí)會將數(shù)據(jù)放入此表,Akismet等插件也會生成此表的數(shù)據(jù)。此表不太重要
wp_comments: 用于保存評論信息的表
wp_links: 用于保存用戶輸入到Wordpress中的鏈接(通過Link Manager)的表
wp_options: 用于保存Wordpress相關(guān)設(shè)置、參數(shù)的表,里面包括了大量的重要信息
wp_postmeta: 用于保存文章的元信息(meta)的表
wp_posts: 用于保存你所有的文章相關(guān)信息的表,非常的重要。一般它存儲的數(shù)據(jù)是最多的
wp_terms: 文章和鏈接分類以及文章的tag分類可以在表里找到
wp_term_relationships: 日志與wp_terms中的類別與標(biāo)簽聯(lián)合起來共同存儲在wp_terms_relationships表中。類別相關(guān)鏈接也存儲在wp_terms_relationships中
wp_term_taxonomy: 該表格對wp_terms表中的條目分類(類別、鏈接以及標(biāo)簽)進(jìn)行說明
wp_usermeta : 用于保存用戶元信息(meta)的表
wp_users:用于保存Wordpress使用者的相關(guān)信息的表
2. 清理涉及到的表
更換主題,刪除插件會在將數(shù)據(jù)留在數(shù)據(jù)庫中,在卸載后無法被清理。除此之外,在由于一些操作,會導(dǎo)致數(shù)據(jù)庫的冗余,比如已經(jīng)沒有的評論,不應(yīng)該在評論元數(shù)據(jù)表中有記錄,由于沒有外鍵的約束,這些記錄沒有被刪除,會造成數(shù)據(jù)的冗余。本文的宗旨是刪除掉不必要的數(shù)據(jù)庫內(nèi)容,提高wordpress的效率
在此,主要涉及到一下幾張表:wp_options,wp_posts,wp_postmeta,wp_commentmeta
注意清理之前進(jìn)行備份
3. wp_options的清理
wp_options 這個數(shù)據(jù)表是wordpress設(shè)置的全局?jǐn)?shù)據(jù),這個表會經(jīng)常有數(shù)據(jù)膨脹。主要原因是:
(1)以前用過的一些插件、主題在刪除之后沒有進(jìn)行設(shè)置的清理,造成殘留數(shù)據(jù)
(2)占用數(shù)據(jù)的大戶–RSS緩存,后臺的數(shù)據(jù)調(diào)用竟然會放到數(shù)據(jù)庫里面
處理方法:
①網(wǎng)上對RSS處理方法有兩種一個是修改后臺的文件直接不去調(diào)用,這個是我不喜歡的畢竟修改了程序,其實(shí)這個很容
易忘記WP升級是太頻繁的哪次更新覆蓋了新文件還是照樣緩存.另外一種就是在配置文件里面填寫define(‘MAGPIE_CACHE_ON’, ’0′); 這個是管用的,添加以后后臺首頁的調(diào)用明顯變慢
②使用插件clean options
③費(fèi)力但是簡單的清除方法:刪除wp_options表,會刪除一些設(shè)置,需要重新設(shè)置wordpress,推薦新手使用
TRUNCATE TABLE wp_options;
4.wp_posts清理
wordpress的文章有好多:wp_posts表中包括
文章種類:文章、修訂版本、頁面、文章的附件、菜單
其中每種文章又會有很多狀態(tài):繼承、發(fā)布、私有、草稿、自動草稿、回收站中
冗余原因:
(1)在博主寫文章的時(shí)候,系統(tǒng)會保存很多的中間狀態(tài),在文章發(fā)布之后其很多的中間狀態(tài)沒有被刪除
解決辦法:
①使用插件:WP Cleaner,使用插件的好處就是有保護(hù)機(jī)制,無論怎么操作都無法影響已發(fā)布的貼子,請放心使用
②自己動手刪除,數(shù)據(jù)庫中的標(biāo)志刪除文章,注意備份
說明:wp_posts的重要字段含義:
post_type:文章類型,post表示為文章,revision表示為修訂版本,page為頁面,attachment是文章的附件信息,nav_menu_item是菜單。這里我們需要的是文章、頁面、和菜單
post_status:文章狀態(tài),inherit是繼承的附件和文章的附帶信息,publish是已經(jīng)發(fā)布、private是私有的,draft是草稿,auto-draft是自動草稿,trash是在回收站。這里我們需要的是publish的狀態(tài)的
這里我們主要是要 已經(jīng)發(fā)布的文章、頁面和菜單,除此之外的都可以刪除,當(dāng)然可以根據(jù)自己的需求選擇刪除哪些
DELETE FROM wp_posts
WHERE NOT(post_status = ‘publish’ AND post_type IN(‘post’,'nav_menu_item’,’ page’));
③去除WP保存修訂版本的功能
WordPress默認(rèn)的功能并不都是我們想要的,比如修訂版本歷史對于大多數(shù)人來說是無用的雞肋功能。所以我么需要禁止一些博客功能,來達(dá)到較為符合個
人要求的博客應(yīng)用。對于高手來說,可以直接修改程序的配置文件,來禁止相關(guān)功能。對于我等程序小白來說還是利用插件是最佳的選擇
推薦中文插件SuperSwitch來關(guān)閉一些我們不需要的博客功能。這個插件可以關(guān)閉自動保存和修訂歷史版本,還可以關(guān)閉博客程序、主題、插件的自動更新。功能非常強(qiáng)大,操作及其簡單。用SuperSwitch禁止了保存修訂版本之后,文章序號就不會斷得太厲害了
5.wp_postmeta清理
wp_postmeta是文章的元信息表,其數(shù)據(jù)是系統(tǒng)或者插件使用
冗余原因:
(1)文章被刪除之后,其在wp_postmeta中的數(shù)據(jù)理應(yīng)被刪除,在系統(tǒng)中多數(shù)情況是系統(tǒng)自動刪除,但是由于人為刪除文章,系統(tǒng)不知道被刪除,就不會刪除wp_postmeta表中的數(shù)據(jù),造成冗余
(2)很多主題、插件沒有做好及時(shí)清除的工作
解決辦法:
① 手動刪除
規(guī)矩刪除
刪除文章中不存在文章的元信息
DELETE FROM wp_postmeta WHERE post_id NOT IN (SELECT post_id FROM wp_posts);
安全刪除
刪除_edit_lock和_edit_last條目是安全的,所以這里給出SQL語句
DELETE FROM wp_postmeta WHERE meta_key = ‘_edit_lock’;
DELETE FROM wp_postmeta WHERE meta_key = ‘_edit_last’;
風(fēng)險(xiǎn)刪除
除了這兩條還執(zhí)行了一些其他語句由于有些風(fēng)險(xiǎn):自己酌情考慮
DELETE FROM wp_postmeta WHERE meta_key = ‘_wp_old_slug’;
DELETE FROM wp_postmeta WHERE meta_key = ‘_revision-control’;
DELETE FROM wp_postmeta WHERE meta_value = ‘{{unknown}}’;
特殊插件刪除
postnav插件會記錄每個文章的訪問數(shù),如果不需要,可以刪除
DELETE FROM wp_postmeta WHERE meta_key = ‘views’;
特殊操作刪除
在WordPress的后臺上傳圖片或者附件后會在wp_postmeta中生成_wp_attached_file和_wp_attachment_metadata兩個項(xiàng),wp_posts也會記錄附件的信息。如果使用FTP工具上傳文件,表中就不會有這些信息
DELETE FROM wp_postmeta WHERE meta_key = ‘_wp_attached_file’;
DELETE FROM wp_postmeta WHERE meta_key = ‘_wp_attachment_metadata’;
潔癖刪除
這幾條條語句執(zhí)行完畢能夠刪除掉95%以上的數(shù)據(jù),算的上是極限優(yōu)化了,最后考慮到這個數(shù)據(jù)表并不是很重要,有潔
凈癖的人可以嘗試清空這個表,當(dāng)然我測試清空表會讓一些原本的數(shù)據(jù)丟失
TRUNCATE TABLE wp_postmeta;
6. wp_commentmeta清理
冗余原因:
(1)評論被刪除之后,其在wp_commentmeta中的數(shù)據(jù)理應(yīng)被刪除,在系統(tǒng)中多數(shù)情況是系統(tǒng)自動刪除,但是由于人為刪除文章,系統(tǒng)不知道被刪除,就不會刪除wp_commentmeta表中的數(shù)據(jù),造成冗余
(2)很多主題、插件沒有做好及時(shí)清除的工作
解決辦法:
一下語句去除沒有用的數(shù)據(jù),如果評論中沒有此條評論,那么在wp_commentmeta也沒有意義,好像wordpress在清空回收站的時(shí)候會刪除wp_commentmeta相應(yīng)的數(shù)據(jù)。如果不出意外,下面的操作我們應(yīng)該不需要做
DELETE FROM wp_comments WHERE comment_approved = ‘trash’;
DELETE FROM wp_commentmeta WHERE comment_id NOT IN (SELECT comment_id FROM wp_comments);
在wp_commentmeta里面會記錄評論被刪除的時(shí)間,這些信息用處不是很大,當(dāng)評論被從回收站刪除之后,這些刪除的時(shí)間意義就不是很大,就可以刪除了,所以用下面的語句一樣達(dá)到刪除的目的
DELETE FROM wp_commentmeta WHERE meta_key LIKE ‘%trash%’;
如果直接全部刪除wp_commentmeta,影響不會太大,這里面不會涉及重要的數(shù)據(jù)
TRUNCATE TABLE wp_commentmeta
7. 總結(jié)
其實(shí)大部分無用的數(shù)據(jù)均在這幾張表中,清理過后應(yīng)該不會又太多的冗余數(shù)據(jù)了。但這里沒有針對特殊插件或主題做數(shù)據(jù)庫清理,有時(shí)這些插件和主題會悄悄動了一些數(shù)據(jù)庫表,這樣給清理帶來很大難度,需要看代碼才知道哦
二、數(shù)據(jù)庫表優(yōu)化
原理:數(shù)據(jù)庫優(yōu)化不
涉及數(shù)據(jù)的刪除,是將數(shù)據(jù)庫的表的狀態(tài)調(diào)整好。在使用phpmyadmin時(shí)候,或許您會看到數(shù)據(jù)庫表后面有多余xxMB的字樣,這個指的是那些已經(jīng)分配
給當(dāng)前表但是卻沒有使用的空間。這個多余是沒有什么害處的,他不會占用你的空間。當(dāng)刪除一個表的一部分記錄時(shí),這些記錄仍然保持在一個linked
list 中,當(dāng)插入新數(shù)據(jù)時(shí)會再次使用這些老紀(jì)錄的位置。所以刪除紀(jì)錄會閑置一些空間造成你說的“多余”
優(yōu)化:
(1)在phpmyadmin手動 優(yōu)化或者修復(fù)表即可
(2)運(yùn)行SQL:
OPTIMIZE TABLE wp_commentmeta;
OPTIMIZE TABLE wp_comments;
OPTIMIZE TABLE wp_links;
OPTIMIZE TABLE wp_options;
OPTIMIZE TABLE wp_postmeta;
OPTIMIZE TABLE wp_posts;
OPTIMIZE TABLE wp_terms;
OPTIMIZE TABLE wp_term_relationships;
OPTIMIZE TABLE wp_term_taxonomy;
OPTIMIZE TABLE wp_usermeta;
OPTIMIZE TABLE wp_users;
(3)插件:Optimize DB
我是使用SQL語句進(jìn)行清理與優(yōu)化的,附我的優(yōu)化SQL語句(我的表前綴是wp1):
DELETE FROM wp1_posts WHERE NOT(post_status = ‘publish’ AND post_type IN(‘post’,'nav_menu_item’,’ page’));
DELETE FROM wp1_postmeta WHERE meta_key in (‘_edit_lock’,
‘_edit_last’, ‘_wp_old_slug’, ‘_revision-control’, ‘{{unknown}}’,
‘_wp_attached_file’, ‘_wp_attachment_metadata’);
DELETE FROM wp1_postmeta WHERE post_id NOT IN (SELECT id FROM wp1_posts);
DELETE FROM wp1_comments WHERE comment_approved like ‘%trash%’;
DELETE FROM wp1_commentmeta WHERE comment_id NOT IN (SELECT comment_id FROM wp1_comments);
OPTIMIZE TABLE wp1_commentmeta;
OPTIMIZE TABLE wp1_comments;
OPTIMIZE TABLE wp1_links;
OPTIMIZE TABLE wp1_options;
OPTIMIZE TABLE wp1_postmeta;
OPTIMIZE TABLE wp1_posts;
OPTIMIZE TABLE wp1_terms;
OPTIMIZE TABLE wp1_term_relationships;
OPTIMIZE TABLE wp1_term_taxonomy;
OPTIMIZE TABLE wp1_usermeta;
OPTIMIZE TABLE wp1_users;
Wordpress共有10個表,按照功能大致分為四類。
user: 用戶信息,包括wp_users表和wp_usermeta表。
post: 文章及評論信息,包括wp_posts、wp_postmeta、wp_comments、wp_post2cat以及wp_categories五個表。
link: 鏈接信息,包括wp_links表和wp_linkcategories表。
option: 全局設(shè)置信息,包括wp_options表。
個人認(rèn)為這個數(shù)據(jù)庫有兩個冗余的地方。一個是wp_post2cat表中的主鍵rel_id,其實(shí)可以不要rel_id,而使用post_id和category_id兩列作為主鍵;另一個是wp_options表,option_id列為自動增長列,僅使用該列即可作為主鍵,而不需要option_id、blog_id、option_name三列聯(lián)合做主鍵。
另外,表的命名規(guī)則也很有意思?;疽?guī)則總結(jié)如下:
保存對象的基本屬性,命名為 wp_objects,使用復(fù)數(shù)(如 wp_posts,wp_comments);
保存對象的擴(kuò)展屬性,命名為 wp_objectmeta,使用單數(shù)(如wp_postmeta,wp_usermeta);
多對多關(guān)系,命名為 wp_a2b,其中a和b分別為多對多關(guān)系兩端的對象名的縮寫(如wp_post2cat)。
首先去wordpress官網(wǎng)下載或者直接登陸WP后臺:插件》安裝插件》在搜索框中輸入websimon-tables,搜索到該插件》立即安裝》啟用。
設(shè)置表格屬性和內(nèi)容:在控制面板“工具”中找到websimon tables,然后設(shè)置行列、已經(jīng)表格內(nèi)容,如下圖所示,可以設(shè)置好表格的內(nèi)容和表格樣式。
插入表格到文章內(nèi)容:把設(shè)置好的表格,如上圖所示找到對應(yīng)的(shortcode)簡碼,直接復(fù)制插入到文章編輯器中,就完成了表格的插入。
測試效果
其它方法:
(1)使用修改wordpress的css樣式來實(shí)現(xiàn),不過這個工程浩大,本人覺得沒那個必要。
(2)使用WP-Table Reloaded表格管理插件,這個也可以實(shí)現(xiàn),但是效果不是很好。