今天打开网站的订单列表页面,加载超久,最后还502了,数据库跑满无法使用导致第三方平台推送失败。
订单有接近17万条,网站用户400,改sql加载200~300秒
SELECT `a`.`shop_id`,
`a`.`ctime`,
`a`.`status`,
`a`.`order_id`,
`a`.`total`,
`w`.`s_name`,
`a`.`result`,
`w`.`shop_type`,
`a`.`originalPrice`
FROM `shop_orders` `a`
INNER JOIN `shop_config` `w`
ON `w`.`id`=`a`.`shop_id`
WHERE ( w.store_id=1 )
AND ( w.delete_time =0 )
ORDER BY `a`.`ctime` DESC LIMIT 0,30
经测试,单表提取数据也是1秒以下,但是连表就出现几分钟的响应。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZwpmL2EzNxAjM0EjM5IDMxAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
在几个老哥线上指导,均无法排排除问题,把订单列表页面都替换上了“暂时维护”的提示了。因为是阿里聚石塔RDS,也无法导出这十几万数据库到本地测试。
当然也不排除是数据库配置太低,毕竟1g1核。计划临时升级数据库配置看,为了保证不影响网站的使用,可以设置为在指定时间替换,在掏钱的时候,还是想再搜搜相关资料。
看到一篇文章,说可以把连表查询改为子查询。
SELECT shop_id,
ctime,
a.status,
order_id,
total,
(select s_name from shop_config where id= a.shop_id) as s_name,
(select shop_type from shop_config where id= a.shop_id) as shop_type,
result,
originalPrice
FROM `shop_orders` `a`
ORDER BY `ctime` DESC
LIMIT 0,30
起初以为结束了,但是又一个老哥提醒到我,这样我就无法给shop_config 加条件限制了。此时我又想到了,还是用连表查询,join是可以使用子查询的。
SELECT `a`.`shop_id`,
`a`.`ctime`,
`a`.`status`,
`a`.`order_id`,
`a`.`total`,
`c`.`s_name`,
`c`.`shop_type`,
`c`.`store_id`,
`result`,
`originalPrice`
FROM `shop_orders` `a`
INNER JOIN(SELECT * FROM `shop_config` WHERE `store_id`= 1) `c` ON `a`.`shop_id`= `c`.`id`
ORDER BY `a`.`ctime` DESC
LIMIT 0,30
正式结束。
你好,我是勤勤学长。
www.11ak.cn
QQ微信同号318692996