我的mysql数据库中有3个表, 其中2个有10,000多行,第3个有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 :(得分:2)
确保您的dba将相应的索引添加到pdate字段。
然后,如果您发现遇到性能问题,请研究提高性能的更高级方法。像应用程序中的分页,分区表等等。
答案 1 :(得分:1)
要了解报告中使用的索引(如果有),请在查询中运行EXPLAIN。
你可能想要索引
另外,请确保deals.id与orders.dealid和reports.dealid(包括NULL / NOT NULL和signed / unsigned)完全相同的数据类型。