From 3c318c5c6e97cdeca53e4ff735f6e3562ad6f2ed Mon Sep 17 00:00:00 2001 From: Nicolas Le Goff Date: Wed, 14 Nov 2012 16:58:16 +0100 Subject: [PATCH] Add force index in report mysql request to avoid full scan table --- lib/classes/module/report/activity.php | 70 +++++++++++----------- lib/classes/module/report/connexion.php | 6 +- lib/classes/module/report/download.php | 7 +-- lib/classes/module/report/nav.php | 13 ++-- lib/classes/module/report/sqlaction.php | 12 ++-- lib/classes/module/report/sqlconnexion.php | 8 +-- lib/classes/module/report/sqldownload.php | 20 +++---- lib/classes/module/report/sqlquestion.php | 12 ++-- 8 files changed, 72 insertions(+), 76 deletions(-) diff --git a/lib/classes/module/report/activity.php b/lib/classes/module/report/activity.php index 1a5108242b..794caeff3e 100644 --- a/lib/classes/module/report/activity.php +++ b/lib/classes/module/report/activity.php @@ -113,8 +113,8 @@ class module_report_activity extends module_report $sql = " SELECT DATE_FORMAT( log.date, '%k' ) AS heures, SUM(1) AS nb - FROM (log) - INNER JOIN log_colls ON (log.id = log_colls.log_id) + FROM log FORCE INDEX (date_site) + INNER JOIN log_colls FORCE INDEX (couple) ON (log.id = log_colls.log_id) WHERE " . $date_filter['sql'] . " AND " . $coll_filter['sql'] . " AND " . $site_filter['sql'] . " @@ -179,8 +179,8 @@ class module_report_activity extends module_report SELECT DATE_FORMAT(log_search.date,'%Y-%m-%d %H:%i:%S') as date , log_search.search ,log_search.results FROM (log_search) - INNER JOIN log ON (log.id = log_search.log_id) - INNER JOIN log_colls ON (log.id = log_colls.log_id) + INNER JOIN log FORCE INDEX (date_site) ON (log.id = log_search.log_id) + INNER JOIN log_colls FORCE INDEX (couple) ON (log.id = log_colls.log_id) WHERE log_search.date > " . $date_filter['sql'] . " AND log.`" . $what . "` = :main_value AND " . $site_filter['sql'] . " @@ -244,8 +244,8 @@ class module_report_activity extends module_report SUM(1) as nb, ROUND(avg(results)) as nb_rep FROM (log_search) - INNER JOIN log ON (log_search.log_id = log.id) - INNER JOIN log_colls ON (log.id = log_colls.log_id) + INNER JOIN log FORCE INDEX (date_site) ON (log_search.log_id = log.id) + INNER JOIN log_colls FORCE INDEX (couple) ON (log.id = log_colls.log_id) WHERE " . $date_filter['sql'] . " AND log_search.search != 'all' AND (" . $coll_filter['sql'] . ")"; @@ -315,8 +315,8 @@ class module_report_activity extends module_report SELECT log_docs.record_id, log_docs.date, log_docs.final as objets FROM (`log_docs`) - INNER JOIN log ON (log_docs.log_id = log.id) - INNER JOIN log_colls ON (log.id = log_colls.log_id) + INNER JOIN log FORCE INDEX (date_site) ON (log_docs.log_id = log.id) + INNER JOIN log_colls FORCE INDEX (couple) ON (log.id = log_colls.log_id) INNER JOIN record ON (log_docs.record_id = record.record_id) WHERE log_docs.action = 'download' AND " . $date_filter['sql'] . " @@ -393,8 +393,8 @@ class module_report_activity extends module_report final FROM (log_docs) INNER JOIN record ON (record.record_id = log_docs.record_id) - INNER JOIN log ON (" . $site_filter['sql'] . " AND log.id = log_docs.log_id) - INNER JOIN log_colls ON (log.id = log_colls.log_id) + INNER JOIN log FORCE INDEX (date_site) ON (" . $site_filter['sql'] . " AND log.id = log_docs.log_id) + INNER JOIN log_colls FORCE INDEX (couple) ON (log.id = log_colls.log_id) LEFT JOIN subdef AS s ON (s.record_id = log_docs.record_id AND s.name = log_docs.final) WHERE " . $date_filter['sql'] . " AND (log_docs.final != 'caption') @@ -489,12 +489,12 @@ class module_report_activity extends module_report SELECT DISTINCT(log." . $on . ") as " . $on . ", usrid, SUM(1) as connexion - FROM (log) - INNER JOIN log_colls ON (log.id = log_colls.log_id) + FROM log FORCE INDEX (date_site) + INNER JOIN log_colls FORCE INDEX (couple) ON (log.id = log_colls.log_id) WHERE log.user != 'API' AND " . $site_filter['sql'] . " AND " . $date_filter['sql'] . " - AND (" . $coll_filter['sql'] . ") + AND " . $coll_filter['sql'] . " GROUP BY " . $on . " ORDER BY connexion DESC "; @@ -589,10 +589,10 @@ class module_report_activity extends module_report final, sum(1) as nb, sum(size) as poid FROM (log_docs as d) - INNER JOIN log ON (" . $site_filter['sql'] . " + INNER JOIN log FORCE INDEX (date_site) ON (" . $site_filter['sql'] . " AND log.id = d.log_id AND " . $date_filter['sql'] . ") - INNER JOIN log_colls ON (log.id = log_colls.log_id) + INNER JOIN log_colls FORCE INDEX (couple) ON (log.id = log_colls.log_id) INNER JOIN record ON record.record_id = d.record_id LEFT JOIN subdef as s on ((d.action = 'download' OR d.action = 'mail') AND s.record_id=d.record_id and s.name=d.final @@ -712,10 +712,10 @@ class module_report_activity extends module_report $sql = " SELECT log.usrid, log.user , d.final as getter, d.record_id, d.date, s.* FROM (log_docs as d) - INNER JOIN log ON (" . $site_filter['sql'] . " + INNER JOIN log FORCE INDEX (date_site) ON (" . $site_filter['sql'] . " AND log.id = d.log_id AND " . $date_filter['sql'] . ") - INNER JOIN log_colls ON (log.id = log_colls.log_id) + INNER JOIN log_colls FORCE INDEX (couple) ON (log.id = log_colls.log_id) INNER JOIN record ON (record.record_id = d.record_id) LEFT JOIN subdef as s ON (s.record_id=d.record_id and s.name='document') WHERE ((" . $coll_filter['sql'] . ") AND " . $record_filter['sql'] . " AND d.action='push') @@ -781,10 +781,10 @@ class module_report_activity extends module_report $sql = " SELECT log.usrid, user, final, sum(1) AS nb, sum(size) AS poid FROM (log_docs AS log_date) - INNER JOIN log ON (log.site = :site_id + INNER JOIN log FORCE INDEX (date_site) ON (log.site = :site_id AND log.id = log_date.log_id AND " . $datefilter['sql'] . ") - INNER JOIN log_colls ON (log.id = log_colls.log_id) + INNER JOIN log_colls FORCE INDEX (couple) ON (log.id = log_colls.log_id) LEFT JOIN subdef AS s ON (log_date.action = 'download' AND s.record_id = log_date.record_id AND s.name = log_date.final @@ -856,10 +856,10 @@ class module_report_activity extends module_report $sql = " SELECT log_date.id, HOUR(log_date.date) as heures - FROM (log as log_date) - INNER JOIN log_colls ON (log_date.id = log_colls.log_id) + FROM log as log_date FORCE INDEX (date_site) + INNER JOIN log_colls FORCE INDEX (couple) ON (log_date.id = log_colls.log_id) WHERE " . $datefilter['sql'] . " - AND (" . $collfilter['sql'] . ") + AND " . $collfilter['sql'] . " AND log_date.site = :site_id"; $stmt = $conn->prepare($sql); @@ -899,7 +899,7 @@ class module_report_activity extends module_report SELECT DISTINCT ( DATE_FORMAT( log_date.date, '%Y-%m-%d' ) ) AS ddate, COUNT( DATE_FORMAT( log_date.date, '%d' ) ) AS activity - FROM log as log_date INNER JOIN log_colls ON (log_date.id = log_colls.log_id) + FROM log as log_date FORCE INDEX (date_site) INNER JOIN log_colls FORCE INDEX (couple) ON (log_date.id = log_colls.log_id) WHERE " . $datefilter['sql'] . " AND log_date.site = :site_id AND (" . $collfilter['sql'] . ") @@ -938,8 +938,8 @@ class module_report_activity extends module_report $sql = " SELECT log_date.usrid, log_date.user, sum(1) AS nb FROM (`log_search`) - INNER JOIN log as log_date ON (log_search.log_id = log_date.id) - INNER JOIN log_colls ON (log_date.id = log_colls.log_id) + INNER JOIN log as log_date FORCE INDEX (date_site) ON (log_search.log_id = log_date.id) + INNER JOIN log_colls FORCE INDEX (couple) ON (log_date.id = log_colls.log_id) WHERE " . $datefilter['sql'] . " AND log_date.site = :site_id AND (" . $collfilter['sql'] . ") @@ -979,8 +979,8 @@ class module_report_activity extends module_report log_date.user, sum(1) AS nb FROM (`log_search`) - INNER JOIN log as log_date ON (log_search.log_id = log_date.id) - INNER JOIN log_colls ON (log_date.id = log_colls.log_id) + INNER JOIN log as log_date FORCE INDEX (date_site) ON (log_search.log_id = log_date.id) + INNER JOIN log_colls FORCE INDEX (couple) ON (log_date.id = log_colls.log_id) WHERE " . $datefilter['sql'] . " AND log_date.site = :site_id AND (" . $collfilter['sql'] . ") @@ -1017,8 +1017,8 @@ class module_report_activity extends module_report $sql = " SELECT referrer, COUNT(referrer) as nb_view FROM (log_view) - INNER JOIN log as log_date ON (log_view.log_id = log_date.id) - INNER JOIN log_colls ON (log_date.id = log_colls.log_id) + INNER JOIN log as log_date FORCE INDEX (date_site) ON (log_view.log_id = log_date.id) + INNER JOIN log_colls FORCE INDEX (couple) ON (log_date.id = log_colls.log_id) WHERE " . $datefilter['sql'] . " AND (" . $collfilter['sql'] . ") GROUP BY referrer @@ -1059,8 +1059,8 @@ class module_report_activity extends module_report DATE_FORMAT( log_date.date, '%Y-%m-%d' ) ) AS ddate, COUNT( DATE_FORMAT( log_date.date, '%d' ) ) AS activity FROM (log_docs as log_date) - INNER JOIN log ON (log_date.log_id = log.id) - INNER JOIN log_colls ON (log.id = log_colls.log_id) + INNER JOIN log FORCE INDEX (date_site) ON (log_date.log_id = log.id) + INNER JOIN log_colls FORCE INDEX (couple) ON (log.id = log_colls.log_id) WHERE " . $datefilter['sql'] . " AND log_date.action = 'add' AND (" . $collfilter['sql'] . ") GROUP BY ddate @@ -1093,8 +1093,8 @@ class module_report_activity extends module_report DATE_FORMAT( log_date.date, '%Y-%m-%d' ) ) AS ddate, COUNT( DATE_FORMAT( log_date.date, '%d' ) ) AS activity FROM (log_docs as log_date) - INNER JOIN log ON log_date.log_id = log.id - INNER JOIN log_colls ON (log.id = log_colls.log_id) + INNER JOIN log FORCE INDEX (date_sit) ON log_date.log_id = log.id + INNER JOIN log_colls FORCE INDEX (couple) ON (log.id = log_colls.log_id) WHERE " . $datefilter['sql'] . " AND log_date.action = 'edit' AND (" . $collfilter['sql'] . ") GROUP BY ddate @@ -1126,8 +1126,8 @@ class module_report_activity extends module_report $sql = " SELECT log.usrid, log.user, sum( 1 ) AS nb FROM (log_docs as log_date) - INNER JOIN log ON (log_date.log_id = log.id) - INNER JOIN log_colls ON (log.id = log_colls.log_id) + INNER JOIN log FORCE INDEX (date_site) ON (log_date.log_id = log.id) + INNER JOIN log_colls FORCE INDEX (couple) ON (log.id = log_colls.log_id) WHERE " . $datefilter['sql'] . " AND log_date.action = 'add' AND (" . $collfilter['sql'] . ") GROUP BY log.usrid diff --git a/lib/classes/module/report/connexion.php b/lib/classes/module/report/connexion.php index 20502e70ed..a4ba1da797 100644 --- a/lib/classes/module/report/connexion.php +++ b/lib/classes/module/report/connexion.php @@ -148,12 +148,12 @@ class module_report_connexion extends module_report $params = array_merge($params, $datefilter['params'], $collfilter['params']); $finalfilter = $datefilter['sql'] . ' AND '; - $finalfilter .= '(' . $collfilter['sql'] . ') AND '; + $finalfilter .= $collfilter['sql'] . ' AND '; $finalfilter .= 'log_date.site = :site_id'; $sql = "SELECT COUNT(usrid) as nb - FROM (log as log_date) - INNER JOIN log_colls ON (log.id = log_colls.log_id) + FROM log as log_date FORCE INDEX (date_site) + INNER JOIN log_colls FORCE INDEX (couple) ON (log.id = log_colls.log_id) WHERE " . $finalfilter; $stmt = $conn->prepare($sql); diff --git a/lib/classes/module/report/download.php b/lib/classes/module/report/download.php index 6631d36428..d65c08d2d9 100644 --- a/lib/classes/module/report/download.php +++ b/lib/classes/module/report/download.php @@ -187,12 +187,11 @@ class module_report_download extends module_report $sql = ' SELECT SUM(1) AS nb - FROM (log) + FROM log FORCE INDEX (date_site) + INNER JOIN log_colls FORCE INDEX (couple) ON (log.id = log_colls.log_id) INNER JOIN log_docs as log_date ON (log.id = log_date.log_id) INNER JOIN record ON (log_date.record_id = record.record_id) - WHERE ( - ' . $finalfilter . ' - ) + WHERE ' . $finalfilter . ' AND ( log_date.action = \'download\' OR log_date.action = \'mail\' diff --git a/lib/classes/module/report/nav.php b/lib/classes/module/report/nav.php index 34ca243fac..f4367b137e 100644 --- a/lib/classes/module/report/nav.php +++ b/lib/classes/module/report/nav.php @@ -69,18 +69,15 @@ class module_report_nav extends module_report $report_filter = $filter->getReportFilter(); $coll_filter = $filter->getCollectionFilter(); $site_filter = $filter->getGvSitFilter(); - $params = array_merge($report_filter['params'], $coll_filter['params'], $site_filter['params']); + $params = array_merge($report_filter['params']); $sql = ' SELECT SUM(1) AS total - FROM (log) - INNER JOIN log_colls ON (log.id = log_colls.log_id) - WHERE (' . $report_filter['sql'] . ' - AND nav != TRIM(\'\') - ) - AND ' . $site_filter['sql'] . ' - AND (' . $coll_filter['sql'] . ')'; + FROM log FORCE INDEX (date_site) + INNER JOIN log_colls FORCE INDEX (couple) ON (log.id = log_colls.log_id) + WHERE ' . $report_filter['sql'] . ' AND nav != "" + '; $stmt = $s->getConnBas()->prepare($sql); $stmt->execute($params); diff --git a/lib/classes/module/report/sqlaction.php b/lib/classes/module/report/sqlaction.php index 63737750d5..c50400ad04 100644 --- a/lib/classes/module/report/sqlaction.php +++ b/lib/classes/module/report/sqlaction.php @@ -54,8 +54,8 @@ class module_report_sqlaction extends module_report_sql implements module_report " SELECT log.usrid, log.user , d.final as getter, d.record_id, d.date, s.* FROM (log_docs as d) - INNER JOIN log ON (" . $site_filter['sql'] . " AND log.id = d.log_id) - INNER JOIN log_colls ON (log.id = log_colls.log_id) + INNER JOIN log FORCE INDEX (date_site) ON (" . $site_filter['sql'] . " AND log.id = d.log_id) + INNER JOIN log_colls FORCE INDEX (couple) ON (log.id = log_colls.log_id) INNER JOIN record ON (record.record_id = d.record_id) LEFT JOIN subdef as s ON (s.record_id=d.record_id and s.name='document') WHERE"; @@ -87,8 +87,8 @@ class module_report_sqlaction extends module_report_sql implements module_report as " . $this->groupby . ", SUM(1) as nombre FROM (log_docs as d) - INNER JOIN log ON (" . $site_filter['sql'] . " AND log.id = d.log_id) - INNER JOIN log_colls ON (log.id = log_colls.log_id) + INNER JOIN log FORCE INDEX (date_site) ON (" . $site_filter['sql'] . " AND log.id = d.log_id) + INNER JOIN log_colls FORCE INDEX (couple) ON (log.id = log_colls.log_id) INNER JOIN record ON (record.record_id = d.record_id) LEFT JOIN subdef as s ON (s.record_id=d.record_id and s.name='document') WHERE "; @@ -123,10 +123,10 @@ class module_report_sqlaction extends module_report_sql implements module_report $sql = " SELECT DISTINCT(" . $this->getTransQuery($field) . ") as val FROM (log_docs as d) - INNER JOIN log ON (" . $site_filter['sql'] . " + INNER JOIN log FORCE INDEX (date_site) ON (" . $site_filter['sql'] . " AND log.id = d.log_id AND " . $date_filter['sql'] . ") - INNER JOIN log_colls ON (log.id = log_colls.log_id) + INNER JOIN log_colls FORCE INDEX (couple) ON (log.id = log_colls.log_id) INNER JOIN record ON (record.record_id = d.record_id) LEFT JOIN subdef as s ON (s.record_id=d.record_id AND s.name='document') WHERE "; diff --git a/lib/classes/module/report/sqlconnexion.php b/lib/classes/module/report/sqlconnexion.php index e9e93ee777..f9f79ff698 100644 --- a/lib/classes/module/report/sqlconnexion.php +++ b/lib/classes/module/report/sqlconnexion.php @@ -61,8 +61,8 @@ class module_report_sqlconnexion extends module_report_sql implements module_rep $this->sql = " SELECT TRIM(" . $this->getTransQuery($this->groupby) . ") as " . $this->groupby . ", SUM(1) as nb - FROM (log) - INNER JOIN log_colls ON (log.id = log_colls.log_id)"; + FROM log FORCE INDEX (date_site) + INNER JOIN log_colls FORCE INDEX (couple) ON (log.id = log_colls.log_id)"; if ($report_filter['sql']) $this->sql .= " WHERE " . $report_filter['sql']; @@ -86,8 +86,8 @@ class module_report_sqlconnexion extends module_report_sql implements module_rep $sql = ' SELECT DISTINCT(' . $this->getTransQuery($field) . ') as val - FROM (log) - INNER JOIN log_colls ON (log.id = log_colls.log_id)'; + FROM log FORCE INDEX (date_site) + INNER JOIN log_colls FORCE INDEX (couple) ON (log.id = log_colls.log_id)'; if ($report_filter['sql']) $sql .= ' WHERE ' . $report_filter['sql']; diff --git a/lib/classes/module/report/sqldownload.php b/lib/classes/module/report/sqldownload.php index 184127e912..b63f6ddea0 100644 --- a/lib/classes/module/report/sqldownload.php +++ b/lib/classes/module/report/sqldownload.php @@ -52,9 +52,9 @@ class module_report_sqldownload extends module_report_sql implements module_repo log_docs.record_id, log_docs.final, log_docs.comment - FROM (log) + FROM log FORCE INDEX (date_site) INNER JOIN log_docs ON (log.id = log_docs.log_id) - INNER JOIN log_colls ON (log.id = log_colls.log_id) + INNER JOIN log_colls FORCE INDEX (couple) ON (log.id = log_colls.log_id) INNER JOIN record ON (log_docs.record_id = record.record_id) WHERE "; @@ -88,9 +88,9 @@ class module_report_sqldownload extends module_report_sql implements module_repo subdef.size, subdef.file, subdef.mime - FROM (log) + FROM log FORCE INDEX (date_site) INNER JOIN log_docs ON (log.id = log_docs.log_id) - INNER JOIN log_colls ON (log.id = log_colls.log_id) + INNER JOIN log_colls FORCE INDEX (couple) ON (log.id = log_colls.log_id) INNER JOIN record ON (log_docs.record_id = record.record_id) INNER JOIN subdef ON (log_docs.record_id = subdef.record_id AND subdef.name = log_docs.final) WHERE @@ -100,9 +100,9 @@ class module_report_sqldownload extends module_report_sql implements module_repo SELECT TRIM(' . $field . ') AS ' . $name . ', SUM(1) AS telechargement - FROM ( log ) + FROM log FORCE INDEX (date_site) INNER JOIN log_docs ON (log.id = log_docs.log_id) - INNER JOIN log_colls ON (log.id = log_colls.log_id) + INNER JOIN log_colls FORCE INDEX (couple) ON (log.id = log_colls.log_id) INNER JOIN record ON (log_docs.record_id = record.record_id) INNER JOIN subdef ON ( log_docs.record_id = subdef.record_id AND subdef.name = log_docs.final) WHERE'; @@ -112,9 +112,9 @@ class module_report_sqldownload extends module_report_sql implements module_repo SELECT TRIM( ' . $this->getTransQuery($this->groupby) . ') AS ' . $name . ', SUM(1) AS nombre - FROM ( log ) + FROM log FORCE INDEX (date_site) INNER JOIN log_docs ON (log.id = log_docs.log_id) - INNER JOIN log_colls ON (log.id = log_colls.log_id) + INNER JOIN log_colls FORCE INDEX (couple) ON (log.id = log_colls.log_id) INNER JOIN record ON (log_docs.record_id = record.record_id) INNER JOIN subdef ON (record.record_id = subdef.record_id AND subdef.name = "document") WHERE '; @@ -154,9 +154,9 @@ class module_report_sqldownload extends module_report_sql implements module_repo $sql = ' SELECT DISTINCT( ' . $this->getTransQuery($field) . ' ) AS val - FROM (log) + FROM log FORCE INDEX (date_site) INNER JOIN log_docs ON (log.id = log_docs.log_id) - INNER JOIN log_colls ON (log.id = log_colls.log_id) + INNER JOIN log_colls FORCE INDEX (couple) ON (log.id = log_colls.log_id) INNER JOIN record ON (log_docs.record_id = record.record_id) INNER JOIN subdef ON (log_docs.record_id = subdef.record_id) WHERE '; diff --git a/lib/classes/module/report/sqlquestion.php b/lib/classes/module/report/sqlquestion.php index f6fdc1c05b..e8fc144001 100644 --- a/lib/classes/module/report/sqlquestion.php +++ b/lib/classes/module/report/sqlquestion.php @@ -44,8 +44,8 @@ class module_report_sqlquestion extends module_report_sql implements module_repo activite, fonction FROM (`log_search`) - INNER JOIN log ON (log.id = log_search.log_id) - INNER JOIN log_colls ON (log.id = log_colls.log_id)"; + INNER JOIN log FORCE INDEX (date_site) ON (log.id = log_search.log_id) + INNER JOIN log_colls FORCE INDEX (couple) ON (log.id = log_colls.log_id)"; $this->sql .= " WHERE " . $report_filter['sql']; @@ -63,8 +63,8 @@ class module_report_sqlquestion extends module_report_sql implements module_repo TRIM(" . $this->getTransQuery($this->groupby) . ") as " . $this->groupby . ", SUM(1) as nb FROM (`log_search`) - INNER JOIN log ON (log.id = log_search.log_id) - INNER JOIN log_colls ON (log.id = log_colls.log_id) + INNER JOIN log FORCE INDEX (date_site) ON (log.id = log_search.log_id) + INNER JOIN log_colls FORCE INDEX (couple) ON (log.id = log_colls.log_id) "; $this->sql .= " WHERE " . $report_filter['sql']; @@ -89,8 +89,8 @@ class module_report_sqlquestion extends module_report_sql implements module_repo $sql = " SELECT DISTINCT(" . $this->getTransQuery($field) . ") as val FROM (`log_search`) - INNER JOIN log ON (log.id = log_search.log_id) - INNER JOIN log_colls ON (log.id = log_colls.log_id) + INNER JOIN log FORCE INDEX (date_site) ON (log.id = log_search.log_id) + INNER JOIN log_colls FORCE INDEX (couple) ON (log.id = log_colls.log_id) "; if ($report_filter['sql'])