1
0

Awesome MySQL tuning for our central query by Matthew Groeninger

This commit is contained in:
Garvin Hicking
2006-11-15 10:18:43 +00:00
parent 5819bc8ec3
commit 932574ee2e
5 changed files with 34 additions and 11 deletions

View File

@ -3,6 +3,12 @@
Version 1.1 ()
------------------------------------------------------------------------
* Huge SQL improvement by "caching" the current timestamp for
5 minutes, so that an SQL string for the central logic will
stay the same for a 5 minute window, thus relying on the DB-Server
to cache query results more efficiently. Major thanks to
Matthew Groeninger.
* Enhanced nl2br plugin so that it will NOT put breaks into pre-
defined tags like <pre>, <code> etc. Not enabled by default.
Thanks to Brendon K from the forums!

View File

@ -1138,5 +1138,22 @@ function &serendipity_pickKey(&$array, $key, $default) {
return $default;
}
/* Retrieves the current timestamp but only deals with minutes to optimize Database caching
* @access public
* @return timestamp
* @author Matthew Groeninger
*/
function serendipity_db_time() {
static $ts = null;
static $cache = 300; // Seconds to cache
if ($ts === null) {
$now = time();
$ts = $now - ($now % $cache) + $cache;
}
return $ts;
}
define("serendipity_FUNCTIONS_LOADED", true);
/* vim: set sts=4 ts=4 expandtab : */

View File

@ -306,9 +306,9 @@ function &serendipity_fetchEntries($range = null, $full = true, $limit = '', $fe
if (!isset($serendipity['GET']['adminModule']) && !serendipity_db_bool($serendipity['showFutureEntries'])) {
if (!empty($cond['and'])) {
$cond['and'] .= " AND e.timestamp <= " . time();
$cond['and'] .= " AND e.timestamp <= " . serendipity_db_time();
} else {
$cond['and'] = "WHERE e.timestamp <= " . time();
$cond['and'] = "WHERE e.timestamp <= " . serendipity_db_time();
}
}
@ -467,7 +467,7 @@ function &serendipity_fetchEntry($key, $val, $full = true, $fetchDrafts = 'false
$cond['and'] = " "; // intentional dummy string to attach dummy AND parts to the WHERE clauses
if ($fetchDrafts == 'false') {
$cond['and'] = " AND e.isdraft = 'false' " . (!serendipity_db_bool($serendipity['showFutureEntries']) ? " AND e.timestamp <= " . time() : '');
$cond['and'] = " AND e.isdraft = 'false' " . (!serendipity_db_bool($serendipity['showFutureEntries']) ? " AND e.timestamp <= " . serendipity_db_time() : '');
}
if (isset($serendipity['GET']['adminModule']) && $serendipity['GET']['adminModule'] == 'entries' && !serendipity_checkPermission('adminEntriesMaintainOthers')) {
@ -715,7 +715,7 @@ function &serendipity_searchEntries($term, $limit = '') {
}
}
$cond['and'] = " AND isdraft = 'false' " . (!serendipity_db_bool($serendipity['showFutureEntries']) ? " AND timestamp <= " . time() : '');
$cond['and'] = " AND isdraft = 'false' " . (!serendipity_db_bool($serendipity['showFutureEntries']) ? " AND timestamp <= " . serendipity_db_time() : '');
serendipity_plugin_api::hook_event('frontend_fetchentries', $cond, array('source' => 'search', 'term' => $term));
serendipity_ACL_SQL($cond, 'limited');
@ -1471,7 +1471,7 @@ function serendipity_printArchives() {
WHERE isdraft = 'false'
AND timestamp >= $s
AND timestamp <= $e "
. (!serendipity_db_bool($serendipity['showFutureEntries']) ? " AND timestamp <= " . time() : '')
. (!serendipity_db_bool($serendipity['showFutureEntries']) ? " AND timestamp <= " . serendipity_db_time() : '')
. (!empty($cat_sql) ? ' AND ' . $cat_sql : '')
. (!empty($serendipity['GET']['viewAuthor']) ? ' AND e.authorid = ' . (int)$serendipity['GET']['viewAuthor'] : '') . "
GROUP BY ec.entryid", false, 'assoc');
@ -1516,19 +1516,19 @@ function serendipity_getTotalCount($what) {
$res = serendipity_db_query("SELECT SUM(e.comments) AS sum
FROM {$serendipity['dbPrefix']}entries AS e
WHERE e.isdraft = 'false'
" . (!serendipity_db_bool($serendipity['showFutureEntries']) ? " AND e.timestamp <= " . time() : ''), true, 'assoc');
" . (!serendipity_db_bool($serendipity['showFutureEntries']) ? " AND e.timestamp <= " . serendipity_db_time() : ''), true, 'assoc');
return $res['sum'];
case 'trackbacks':
$res = serendipity_db_query("SELECT SUM(e.trackbacks) AS sum
FROM {$serendipity['dbPrefix']}entries AS e
WHERE e.isdraft = 'false'
" . (!serendipity_db_bool($serendipity['showFutureEntries']) ? " AND e.timestamp <= " . time() : ''), true, 'assoc');
" . (!serendipity_db_bool($serendipity['showFutureEntries']) ? " AND e.timestamp <= " . serendipity_db_time() : ''), true, 'assoc');
return $res['sum'];
case 'entries':
$res = serendipity_db_query("SELECT COUNT(e.id) AS sum
FROM {$serendipity['dbPrefix']}entries AS e
WHERE e.isdraft = 'false'
" . (!serendipity_db_bool($serendipity['showFutureEntries']) ? " AND e.timestamp <= " . time() : ''), true, 'assoc');
" . (!serendipity_db_bool($serendipity['showFutureEntries']) ? " AND e.timestamp <= " . serendipity_db_time() : ''), true, 'assoc');
return $res['sum'];
}

View File

@ -181,7 +181,7 @@ class serendipity_calendar_plugin extends serendipity_plugin {
$cond = array();
$cond['and'] = "WHERE e.timestamp >= " . serendipity_serverOffsetHour($firstts, true) . "
AND e.timestamp <= " . serendipity_serverOffsetHour($endts, true) . "
" . (!serendipity_db_bool($serendipity['showFutureEntries']) ? " AND e.timestamp <= " . time() : '') . "
" . (!serendipity_db_bool($serendipity['showFutureEntries']) ? " AND e.timestamp <= " . serendipity_db_time() : '') . "
AND e.isdraft = 'false'";
serendipity_plugin_api::hook_event('frontend_fetchentries', $cond, array('noCache' => false, 'noSticky' => false, 'source' => 'calendar'));
@ -1440,7 +1440,7 @@ class serendipity_categories_plugin extends serendipity_plugin {
WHERE ec.categoryid = c.categoryid
AND ec.entryid = e.id
AND e.isdraft = 'false'
" . (!serendipity_db_bool($serendipity['showFutureEntries']) ? " AND e.timestamp <= " . time() : '') . "
" . (!serendipity_db_bool($serendipity['showFutureEntries']) ? " AND e.timestamp <= " . serendipity_db_time() : '') . "
GROUP BY c.categoryid, c.category_name
ORDER BY postings DESC";
$category_rows = serendipity_db_query($cat_sql);

View File

@ -270,7 +270,7 @@ if (preg_match(PAT_ARCHIVES, $uri, $matches) || isset($serendipity['GET']['range
$_GET['serendipity']['action'] = 'read';
$_GET['serendipity']['id'] = $id;
$title = serendipity_db_query("SELECT title FROM {$serendipity['dbPrefix']}entries WHERE id=$id AND isdraft = 'false' " . (!serendipity_db_bool($serendipity['showFutureEntries']) ? " AND timestamp <= " . time() : ''), true);
$title = serendipity_db_query("SELECT title FROM {$serendipity['dbPrefix']}entries WHERE id=$id AND isdraft = 'false' " . (!serendipity_db_bool($serendipity['showFutureEntries']) ? " AND timestamp <= " . serendipity_db_time() : ''), true);
if (is_array($title)) {
$serendipity['head_title'] = htmlspecialchars($title[0]);
$serendipity['head_subtitle'] = htmlspecialchars($serendipity['blogTitle']);