删除不必要的MySQL查询

时间:2013-01-16 作者:ahmetlutfu

我的一篇帖子从mysql获得了31个查询。我检查了所有查询。我看到了这个问题。

我正在使用last postscategories 小部件。我认为没有必要提出质疑。如何删除主题

Query: SELECT option_value FROM xy_options WHERE option_name = \'widget_pages\' LIMIT 1
Query: SELECT option_value FROM xy_options WHERE option_name = \'widget_calendar\' LIMIT 1
Query: SELECT option_value FROM xy_options WHERE option_name = \'widget_tag_cloud\' LIMIT 1
Query: SELECT option_value FROM xy_options WHERE option_name = \'widget_nav_menu\' LIMIT 1
我的侧边栏在这里https://gist.github.com/4546327

2 个回复
最合适的回答,由SO网友:cowbellemoo 整理而成

我能说的最好的情况是,这些默认小部件在构建类时会从数据库中获得选项,因此如果不完全禁用这些小部件,就无法阻止DB查询。根据您的需要,您可能需要轻微的性能提升,而不需要小部件,在这种情况下,您可以使用此代码禁用它们(放在functions.php中):

// Remove unneeded widgets that have undesirable query overhead
add_action( \'widgets_init\', \'remove_unneeded_widgets\' );
function remove_unneeded_widgets() {
    unregister_widget(\'WP_Widget_Pages\');
    unregister_widget(\'WP_Widget_Calendar\');
    unregister_widget(\'WP_Widget_Tag_Cloud\');
    unregister_widget(\'WP_Nav_Menu_Widget\');
}
有关更多默认窗口小部件类名,请参见此处:http://codex.wordpress.org/Function_Reference/unregister_widget

UPDATE:

我做了更多的研究,发现这四个小部件没有任何自动加载选项,即使其他几个小部件在wp_install_defaults() 中的函数/wp-admin/includes/upgrade.php. 这可能是一种疏忽。在任何情况下,如果这些小部件从未加载到侧栏中WP_Widget 父类或小部件类从未有机会设置任何默认值。其他小部件是构建和使用的get_option() 但不要生成查询,因为它们自动加载了许多其他WordPress选项。这四个没有自动加载选项,所以get_option() 必须为每个查询数据库。

最简单的解决方案就是在第一次激活主题时指定默认值,如下所示:

// Clean up widget settings that weren\'t set at installation
add_action( \'after_switch_theme\', \'set_missing_widget_options\' );
function set_missing_widget_options( ){
    add_option( \'widget_pages\', array ( \'_multiwidget\' => 1 ) );
    add_option( \'widget_calendar\', array ( \'_multiwidget\' => 1 ) );
    add_option( \'widget_tag_cloud\', array ( \'_multiwidget\' => 1 ) );
    add_option( \'widget_nav_menu\', array ( \'_multiwidget\' => 1 ) );
}

SO网友:fischi

只要看一眼您的代码sidebar.php 是相当广泛和多变的。

这些选项不会直接加载到sidebar.php, 我想它们应该加载到您的小部件中,您似乎有一些。由于您的主题似乎有很多可用的选项,您需要加载所有这些值以确保所有功能。

我强烈建议在这种情况下不要弄乱代码,因为您可能会丢失以后可能需要的功能,以及get_option() 应该立即处理生成上述查询的。

结束

相关推荐

Wordpress SQL JOIN query

Hi我试图在同一个查询调用中运行2个查询。 // send the query global $wpdb; $commentQ = \"SELECT * FROM $wpdb->comments \" . $whereClause . $orderBy; $comments = $wpdb->get_results( $commentQ, ARRAY_A); 到目前为止,它是可行的,但当我尝试运行2个查询时,它失败了。我想做的是我想跑步