我想從不同的表和數據庫工作不同的查詢一個MySQL查詢結果,這是我的表結構的數據庫名稱:MySQL的聯合查詢花費過多的時間來執行
數據庫ads1
- 表:clicks_214
,requests
數據庫ads2
- 表:clicks_255
,requests
數據庫ads3
- 表:clicks_256
,requests
,這是我想執行
$query="";
for($i=1;$i<4;++$i)
{
$this->db_num=$i;
$this->selectDB($i);
$table=$this->getTableName();
$db=$this->getDatabaseName();
$query.="(SELECT r.kwd, count(c.rid) as cnum, count(r.kwd) as rnum
FROM $db.requests r LEFT JOIN $db.$table c ON r.id=c.rid
WHERE hid='$hid'
AND r.time BETWEEN '$date1 $hour1:00:00' AND '$date2 $hour2:59:59'
GROUP BY r.kwd
ORDER BY cnum DESC
LIMIT $limit,50)";
if($i<3)
{
$query.=" UNION ";
}
}
我當然肯定這是不是做的最好辦法,只是因爲我必須等待查詢5分鐘即可獲得結果。有沒有辦法做得更快?
哪裏藏起來從何而來?另外,我敢問你爲什麼有多個數據庫和表? – Strawberry 2014-10-10 12:39:21
Hid來自另一個僅用於比較請求的表。我有多個數據庫和表,因爲數據記錄的數量很大,但表結構是相同的;不同數據庫之間的唯一區別是「click」表,它可以改變每個數據庫的名稱($ table變量) – CapitanFindus 2014-10-10 13:09:37
您可以在MySQL窗口中執行查詢併發布EXPLAIN? – 2014-10-10 13:43:50