WordPress显示数据库查询次数和查询花费时间

WordPress提供了一些功能函数可以轻松地显示数据库查询的统计信息,这些信息可以公开地显示在网页中,或者隐藏在源代码中,更或者只有你自己可以看到。

WordPress主要提供了两个统计函数:

1.网页加载时查询数据库的次数:

<?php echo get_num_queries(); ?>

 

2.服务器端完成这些查询所花费的时间:

<?php timer_stop(7); ?>

 

可以使用3种方式在网页中显示:

1. 公开地显示查询的统计信息:

如果你觉的你的服务器或空间的处理速度好,或者想让你的访问者看到这些查询统计信息的话,你可以将这些统计信息公开显示在页面中:(效果查看博客的页面底部)

<p>< ?php echo get_num_queries(); ?> queries in < ?php timer_stop(3); ?> seconds</p>

 

2. 将统计信息显示在源代码中,而不出现页面的内容中:

如果你不想将统计信息显示在页面上供访问者查看,但又想自己可以知道这些统计信息,那么你可以通过html的注释将结果只显示在源代码中(PS:大家也可以从源代码中查看的哦!):

<!-- <?php echo get_num_queries(); ?> queries in < ?php timer_stop(3); ?> seconds -->

 

3. 统计信息只有你自己登录了后可以看到:

该方法是第二种显示的优化方法,只需博客管理员登录后就可以查看查询统计信息,访问者是无法查看的:

< ?php if (current_user_can('level_10')) {
echo '<!-- ' . get_num_queries() . ' queries in ' . timer_stop(3) . ' seconds -->';
} ?>

 

如果想查看具体查询了数据库哪些内容,可以用如下解决方法:

1、首先在 wp-config.php 里添加如下代码:

define('SAVEQUERIES',true);

 

然后在 footer.php 里添加如下代码:

<?php if(is_user_logged_in()){
global $wpdb;
echo "<pre>";
print_r($wpdb->queries);
echo "</pre>";
}?>

 

分析:

1、if (is_user_logged_in()) 用于判断当前访客是否已登录,也可以用 if (current_user_can('level_10')) 来判断是否为管理员登录,目的是为了不让游客查看到这些数据,此代码可省;

2、global $wpdb; 定义全局变量$wpdb,这是Wordpress默认的数据库类;

3、<pre></pre>将结果嵌套在HTML标签<pre>内;

4、print_r($wpdb->queries); 输出各次数据库查询的信息。

刷新首页或日志页,可看到类似如下的输出结果:

Array
(
[0]=>Array
(
[0]=> SELECT SQL_CALC_FOUND_ROWS wp_posts.* FROM wp_posts WHERE 1=1 AND wp_posts.post_type ='post' AND (wp_posts.post_status ='publish' OR wp_posts.post_status ='private') ORDER BY wp_posts.post_date DESC LIMIT 0,10
[1]=>0.0003960132598877
[2]=>require, wp, WP->main, WP->query_posts, WP_Query->query, WP_Query->get_posts
)
 
[1]=>Array
(
[0]=> SELECT option_value FROM wp_options WHERE option_name ='nuodou_header_code' LIMIT 1
[1]=>0.0013589859008789
[2]=>require, require_once, include, get_header, locate_template, load_template, require_once, get_option
)

 

下面的活儿就得自己分析了,看看哪些是可以删除,哪些是可以改进的,以减少数据库查询次数。

 

非常实用的12个WordPress数据库维护SQL语句

下面假设 WordPress 数据库的表的前缀都是默认的“wp_”。具体用时可根据自己的数据库后缀名进行相应的字段修改。

1. 直接在数据库中修改密码

密码忘记了是经常的事情,博客密码忘记了进不去,可以直接在数据库里面修改:

UPDATE wp_users SET user_pass = MD5('PASSWORD') WHERE user_login ='admin'

 

上面采用了 MySQL 的 MD5() 函数讲密码转成 MD5 Hash。

2. 将日志从一个作者转移到另外一个

假如你的博客的某个作者离开了,或者你不想让“admin”作为作者名,想把日志的作者从一个改到另外一个:

UPDATE wp_posts SET post_author=NEW_AUTHOR_ID WHERE post_author=OLD_AUTHOR_ID;

 

*注:你需要知道两个作者的 user id。

3. 删除数据库中日志修订记录和其相关的 post_meta 数据

特别是针对多人博客的时候,日志修订功能很重要,但是日志修订功能也在数据库里面添加了很多的数据,假设你的博客只有 100 篇日志,每篇日志有 10 个日志修订,你的 posts 表中就会有超过 1000 条记录,严重的数据冗余:

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'

 

*注:上面的 SQL 将删除数据库中所有的日志修订记录和其相关的 meta 信息(自定义字段)。

4. 批量删除垃圾留言

如果你一段时间没有管理你的博客,刚好出去休假,没有办法上网,并且博客也没有装类似 Akismet 这类防垃圾留言插件,那么你回来的时候,你会发现博客后台有成千上万条垃圾留言需要你去审核。

这个时候,其实你只需要审核通过正常的留言,然后执行下面这条 SQL:

DELETE FROM wp_comments WHERE comment_approved ='0';

 

5. 查找没用的标签

你可能创建一些 WordPress 标签之后,就没有再使用,你可以通过下面这条 SQL 找到它们,然后安全的删除他们。

SELECT *From wp_terms wt INNER JOIN wp_term_taxonomy wtt ON wt.term_id=wtt.term_id WHERE wtt.taxonomy='post_tag' AND wtt.count=0;

 

6. 查找和替换数据

对于熟悉 MySQL 数据库的开发者来说,replace() 这个 MySQL 函数都应该很熟悉,它可以让你指定一个字段,然后替换它里面的字符串,一旦执行,所有这个字段里面的字符串都会被替换。对于 WordPress 博客来说,这个 SQL 则非常实用,它可以让你批量修改某些输入错误,或者某个邮件地址等等。

UPDATE table_name SET field_name = replace( field_name,'string_to_find','string_to_replace');

 

替换日志内容中字符串:

UPDATE wp_posts SET post_content = replace( post_content,'string_to_find','string_to_replace');

 

将某个留言者地址替换下:

UPDATE wp_comments SET comment_author_url = REPLACE( comment_author_url,'http://oldurl.com','http://newurl.com');

 

留言者邮箱:

UPDATE wp_comments SET comment_author_email = REPLACE( comment_author_email,'old-email@address.com','new-email@address.com');

 

还有一个 WordPress 插件 Search & Replace 还提供一个后台让你更加容易进行批量替换。

7. 获取所有留言者的邮件地址

有时候你想做点不是那么好的事情,比如给所有留言者发下邮件,告诉他们你博客做了一些新的功能,或者写了一个很不错的文章,那么你干坏事情之前,首先要获取所有留言者的邮件地址:

SELECT DISTINCT comment_author_email FROM wp_comments;

 

*注:上面的 DISTINCT 让你获取的邮件地址是唯一的,即使这个用户发过好几次留言,也不怕。

不过群发邮件这件事情个人建议还是不要这样做好。 

8. 一次把所有插件都停了

网站出现问题了,需要一次把插件全部都先停了之后检测下:

UPDATE wp_options SET option_value ='' WHERE option_name ='active_plugins';

 

9. 删除没用的标签

没用的标签当然要删除了:

DELETE a,b,c
FROM
wp_terms AS a
LEFT JOIN wp_term_taxonomy AS c ON a.term_id = c.term_id
LEFT JOIN wp_term_relationships AS b ON b.term_taxonomy_id = c.term_taxonomy_id
WHERE (
c.taxonomy ='post_tag' AND
c.count =0
);

 

*注:上面 SQL 除了删除所有没用的标签,还删除了所有标签分类模式信息以及和日志关联的关系。

10. 列出没用的 post meta

wp_postmeta 中的数据是由一些插件或者自定义字段生成的,他是对 wp_posts 表的一种无限的扩展,但是可能由于某种原因,日志被删除了,但是它的 meta 信息还存在 wp_postmeta 表中,下面这条 SQL 将这些没有关联日志的 meta 数据列出:

SELECT * FROM wp_postmeta pm LEFT JOIN wp_posts wp ON wp.ID = pm.post_id WHERE wp.ID IS NULL;

 

11. 关闭旧日志留言功能

厄,对于一些技术博客或者其他博客来说,一些旧日志的内容可能已经过时了,但是一些读者,还是对一些问题“纠缠不清”或者“喋喋不休”,怎么办,把留言关了就好了:

关闭留言:

UPDATE wp_posts SET comment_status ='closed' WHERE post_date <'2009-01-01' AND post_status ='publish';

 

关闭Trackback:

UPDATE wp_posts SET ping_status="closed" WHERE post_date <'2009-01-01' AND post_status ='publish';

 

12. 删除所有 url 含有特定字符串的留言

一些留言者很烦,一次留几十个,其链接都指定到一些卖伟哥,起重机,SEO 的站点,烦人的很,一个一个删,又累,下面这条 SQL 可以来帮忙:

DELETE from wp_comments WHERE comment_author_url LIKE "%viagra%";

 

简单总结

这些 SQL 语句是直接对数据库进行操作的,如果你不是那么懂数据库或者 SQL 语言,建议你不要这么做,如果你还是比较自信 SQL 操作,建议操作之前备份下数据库。

 

wordpress入门基础:wordpress文件系统结构详细介绍

根目录
|
|

wp-admin — wp-content — wp-includes
|                    |        |_________________________________________
|                    |________________________                                                         |
|                                                                     |                                                        |

css — images — includes — js — maint       languages — plugins — themes         images — js — pomo — Text — theme-compat
|
Diff
|
Engine — Renderer

 

 

根目录

1.index.php:WordPress核心索引文件,即博客输出文件。

2.license.txt:WordPress GPL许可证文件。

3.my-hacks.php:定义了博客输出之前处理的追加程序。默认安装中并没有这个文件,但如果存在,它就会被管理页面引用。

4.readme.html:WordPress安装导言。

5.wp-atom.php:输出Atom信息聚合内容。

6.wp-blog-header.php:根据博客参数定义博客页面显示内容。

7.wp-cron.php

8.wp-comments-post.php:接收评论,并把其添加到数据库。

9.wp-commentsrss2.php:用来生成日志评论的RSS2信息聚合内容。

10.wp-config-sample.php:把WordPress连接到MySQL数据库的示例配置文件。

11.wp-config.php:这是真正把WordPress连接到MySQL数据库的配置文件。默认安装中虽不包括它,但由于WordPress运行需要这一文件,因此,用户需要编辑这个文件以更改相关设置。

12.wp-feed.php:根据请求定义feed类型并其返回feed请求文件。

13.wp-links-opml.php:生成OPML格式的链接(通过WordPress管理菜单添加)列表。

14.wp-login.php:定义注册用户的登陆页面。

15.wp-mail.php:用来获取通过邮件提交的博文。这个文件的URL通常被添加到cron任务中,这样cron就会定期检索文件并接收邮件日志。

16.wp-pass.php:审核受密码保护文章的密码并显示被保护文章。

17.wp-rdf.php:生成RDF信息聚合内容。

18.wp-register.php:允许新用户通过联机表单注册用户名。

19.wp-rss.php:生成RSS信息聚合内容。

20.wp-rss2.php:生成RSS2信息聚合内容。

21.wp-settings.php:运行执行前的例行程序,包括检查安装是否正确,使用辅助函数,应用用户插件,初始化执行计时器等等。

22.wp-trackback.php:处理trackback请求。

23.wp.php:显示博客日志的简单模板。并没有什么神奇之处,但包括了部分index.php内容。

24.xmlrpc.php:处理xmlrpc请求。用户无需通过内置的网络管理界面就可发布文章。

wp-admin

1.wp-admin/admin.php:管理文件的核心文件。用来连接数据库,整合动态菜单数据,显示非核心控制页面等。

2.wp-admin/admin-db.php

3.wp-admin/admin-footer.php:定义所有管理控制台的页脚。

4.wp-admin/admin-functions.php:定义了管理控制台使用的多种函数。5.wp-admin/admin-header.php:定义了管理控制台的上半部分内容,包括菜单逻辑 (menu logic)的 menu-header.php文件。

6.wp-admin/bookmarklet.php:使用书签功能时,定义弹出页面。撰写日志时使用默认的edit-form.php文件。

7.wp-admin/categories.php:定义管理页面的类别管理。参考: Manage – Categories

8.wp-admin/cat-js.php

9.wp-admin/edit.php:定义管理页面的日志管理。参考:  Manage – Posts

10.wp-admin/edit-comments.php:定义管理页面的评论管理。参考:  Manage – Comments

11.wp-admin/edit-form-advanced.php:定义管理页面的日志高级编辑形式管理,包括post.php。参考:  Write – Write Post – Advanced

12.wp-admin/edit-form.php:定义管理页面的日志简单编辑形式管理,包括post.php。参考:  Write – Write Post

13.wp-admin/edit-form-comment.php:编辑特定日志评论。

14.wp-admin/edit-form-ajax-cat.php

15.wp-admin/edit-link-form.php

16.wp-admin/edit-page-form.php:定义管理模块页面的页面编辑,包括post.php和page-new.php。参考: Write – Write Page

17.wp-admin/edit-pages.php:定义管理模块页面的页面管理。参考:  Manage – Pages

18.wp-admin/execute-pings.php

19.wp-admin/import.php

20.wp-admin/index.php:默认管理页面。根据用户请求显示相应的页面。

21.wp-admin/inline-uploading.php

22.wp-admin/install-helper.php:定义数据库维护函数,包括popular-in-plugins maybe_create_table() 和maybe_add_column()。

23.wp-admin/install.php:安装WordPress。

24.wp-admin/link-add.php:链接添加。参考:  Links – Add Link

25.wp-admin/link-categories.php:链接分类管理。参考: Links – Link Categories

26.wp-admin/link-import.php:导入链接。参考: Links – Import Links

27.wp-admin/link-manager.php:链接管理。参考:  Links – Manage Links

28.wp-admin/link-parse-opml.ph:导入链接时,用来解析OPML文件。

29.wp-admin/list-manipulation.js

30.wp-admin/list-manipulation.php

31.wp-admin/menu-header.php:用于在管理界面显示菜单。

32.wp-admin/menu.php:定义了默认管理菜单结构。

33.wp-admin/moderation.php:定义了评论审核函数。

34.wp-admin/options.php:升级后,用来更改所有设置。

35.wp-admin/options-discussion.php:管理评论和trackback相关选项。参考:  Options – Discussion

36.wp-admin/options-general.php:管理基本配置选项。参考: Options – General

37.wp-admin/options-head.php

38.wp-admin/options-misc.php:设置文件上传,链接跟踪,自定义”hacks”等相关选项。参考:Options – Miscellaneous

39.wp-admin/options-permalink.php:管理永久链接选项。参考: Options – Permalinks

40.wp-admin/options-reading.php:设置如何把网站信息发送到读者浏览器或其它应用程序。参考: Options – Reading

41.wp-admin/options-writing.php:管理日志撰写界面。参考:Options – Writing

42.wp-admin/page-new.php:创建新页面。

43.wp-admin/plugin-editor.php:编辑插件文件。

44.wp-admin/plugins.php:管理插件。

45.wp-admin/post.php:创建新日志。

46.wp-admin/profile-update.php

47.wp-admin/profile.php:管理个人资料或配置。

48.wp-admin/setup-config.php:安装时,用来创建wp-config.php文件。

49.wp-admin/sidebar.php

50.wp-admin/templates.php:编辑服务器可写文件。

51.wp-admin/theme-editor.php:编辑特定主题中的文件。

52.wp-admin/themes.php:管理主题。

53.wp-admin/update-links.php

54.wp-admin/upgrade-functions.php:定义了版本升级函数。

55.wp-admin/upgrade-schema.php:定义了升级中使用的默认表格结构和选项。

56.wp-admin/upgrade.php:版本升级。

57.wp-admin/user-edit.php:编辑用户。

58.wp-admin/users.php:管理用户。

59.wp-admin/wp-admin.css:定义了管理控制台的默认样式表。

60.wp-admin/xfn.js

wp-includes

1.wp-includes/cache.php

2.wp-includes/capabilities.php

3.wp-includes/class-IXR.php:Incutio XML-RPC库。包括了 XML RPC支持函数。由http://scripts.incutio.com/xmlrpc/提供支持。

4.wp-includes/classes.php:包括了基本的类,如核心文章提取机制WP_Query和改写管理WP_Rewrite。

5.wp-includes/class-pop3.php:包括了支持使用POP邮箱的类。可供wp-mail.php 使用。

6.wp-includes/class-snoopy.php:Snoopy是一个PHP类,用来模仿Web浏览器的功能,它能自动完成检索网页和发送表单的任务。

7.wp-includes/comment-functions.php

8.wp-includes/default-filters.php

9.wp-includes/feed-functions.php

10.wp-includes/functions-compat.php:即新版本PHP中用来支持老版本PHP的函数文件。

11.wp-includes/functions-formatting.php:用于清理XHTML和用特定字符集正确格式化文本。

12.wp-includes/functions-post.php:定义了在数据库中管理日志,查询用户权限,提取和撰写评论等函数。

13.wp-includes/functions.php:包含许多重要的支持函数,它是WordPress中最大的文件,函数数量几乎是第二大文件的两倍。

14.wp-includes/gettext.php:PHP-gettext GPL 翻译库组成部分。

15.wp-includes/kses.php:用来渲染和过滤日志或评论中的HTML。

16.wp-includes/links.php:用来管理和使用WordPress的链接功能。

17.wp-includes/locale.php:用来替代默认的星期和月份值。

18.wp-includes/pluggable-functions.php

19.wp-includes/registration-functions.php

20.wp-includes/rss-functions.php

21.wp-includes/streams.php:定义了包装文件流和字符流的类。

22.wp-includes/template-functions-author.php:包含了与日志作者或评论人相关的主题函数。

23.wp-includes/template-functions-category.php:包含了与类别相关的主题函数。

24.wp-includes/template-functions-comment.php:包含了与评论相关的主题函数。

25.wp-includes/template-functions-general.php:包含了常规主题函数。

26.wp-includes/template-functions-links.php:包含了与链接相关的主题函数。

27.wp-includes/template-functions-post.php:包含了与日志相关的主题函数。

28.wp-includes/template-functions.php:包含了以上所有”template-”文件。

29.wp-includes/template-loader.php

30.wp-includes/vars.php:用来设置杂项变量。

31.wp-includes/version.php:用来设置当前使用的WordPress版本。

32.wp-includes/wp-db.php:包含了用来连接MySQL数据库的函数。

33.wp-includes/wp-l10n.php:提供支持多语言版本的函数。

 

2014 年 8 月
 123
45678910
11121314151617
18192021222324
25262728293031

广告

分类

近期评论

标签

历史上的今天

    历史上的今天没有存档

归档