如何管理从多个表中选择许多数据


how to manage selecting many data from multiple tables?

我有3个表在我的mysql数据库,其中2个是10000 +行,第三个是100+行。

my query is

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

我如何管理选择这么多数据而不使站点卡住或失败?

确保您的dba为更新字段添加了适当的索引。

然后,如果你发现你正在经历性能问题,寻找更高级的方法来提高性能。如应用程序中的分页、分区表等

要找出报告中使用了哪些索引(如果有的话),请在查询中运行EXPLAIN。

你可能想在

上索引
  • 交易。id(虽然我假设它已经是主键,因此不需要另一个索引)
  • orders.dealid
  • reports.dealid
  • reports.pdate

同时,确保交易。id是与orders.dealid和reports.dealid完全相同的数据类型(包括NULL/NOT NULL和signed/unsigned)。