2011-07-24 61 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和有符号/无符号)。