我有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)。