打开页面http://example.com/?q=admin/settings/devel(如果你启用了开发区块的话,那么还可点击“Devel 设置”链接),选中“Collect query info”(收集查询信息) 和 “Display query log”(显示查询日志)旁的复选框。
一旦你保存了这些设置,你将会看到,在每个页面的最底部,都有一列查询,这些查询就是为生成当前页面所用到的所有查询语句!此外,列表还会告诉你生成查询的函数,该查询所耗费的时间,以及查询的调用次数。
你可以在许多方式中使用这一信息。例如,如果同一查询在单个页面中被调用了40次,那么你就需要检查一下,你的代码中是否存在一个坏的控制结构循环。如果确实如此的话,那么你可以考虑使用一个静态变量,在请求期间,来保存数据库查询结果。下面是一个例子,它给出了这个设计模式的大致样子(来自于modules/taxonomy/taxonomy.module):
function taxonomy_get_term($tid) {
// Define a static variable to hold data during this page request.
static $terms = array();
// Look in the static variable and only hit the database if the data
// for this term ID has not already been retrieved.
if (!isset($terms[$tid])) {
$terms[$tid] = db_fetch_object(db_query('SELECT * FROM {term_data} WHERE tid = %d', $tid));
}
return $terms[$tid];
}
我们创建了一个静态数组来保存结果集,这样,如果查询已被执行过了,那么我们就已经获得了该值,这样就可以直接将其返回,而不需要再次查询数据库了。