2011-07-24 93 views
0

我在我的mysql數據庫中有3個表, 其中2個是10,000行,第三個是100行。如何管理從多個表中選擇多個數據?

我的查詢是

SELECT `deals`.`name`, 
     `deals`.`id` as `deals_id`, 
     `reports`.`dealid`, 
     `reports`.`pdeealnum`, 
     `reports`.`pconfirmed`, 
     `reports`.`pdate`, 
     `reports`.`ppay`, 
     `reports`.`pfname`, 
     `reports`.`plname`, 
     `reports`.`pmail`, 
     `reports`.`paddress`, 
     `reports`.`pphone`, 
     `reports`.`pdate`, 
     `orders`.`id` as `coupon`, 
     `orders`.`dealid` 
    FROM `deals` 
LEFT JOIN `reports` ON `reports`.`dealid` = `deals`.`id` 
LEFT JOIN `orders` ON `orders`.`dealid` = `deals`.`id` 
    WHERE `reports`.`pdate` >= '".strtotime($_POST['start_date'])."' 
     AND `reports`.`pdate` <='".strtotime($_POST['end_date'])."' 
ORDER BY `reports`.`pdate` DESC 

如何管理未經本站選擇這麼多的數據卡住或失敗?

+0

問題目前的形式沒什麼意義... –

+5

通常...索引,限制。 – Rufinus

+0

Yoni,你想從這些數據中產生什麼類型的報告?這不是一個特別大的數據庫,但是在所有表上做一堆全表掃描會讓你放慢速度。 –

回答

2

確保您的dba將相應的索引添加到更新字段中。

然後,如果您發現遇到性能問題,請查看改進性能的更高級方法。諸如在應用程序中分頁,分區表等。

1

要找出報告中正在使用的索引(如果有),請在您的查詢上運行EXPLAIN

你可能想在

  • deals.id指數(雖然我假設它的主鍵已經,因此並不需要另一個索引)
  • orders.dealid
  • 報告。 dealid
  • reports.pdate

同時,確保deals.id是完全相同的數據類型orders.dealid和reports.dealid(我包括NULL/NOT NULL和有符號/無符號)。