shopex数据库优化实例

ShopEx4.8.5是商派早年推出的一个基于php5.2平台的半开源电子商务建站软件,曾经一度有50多万用户使用。不过近年来更新比较少,加上有新的产品推出,官方对shopex的维护力度大不如前。很多用户在使用中,发现并发到一定量时,网站访问速度就明显下降。由于shopex是并开源产品,只有专业的开发人员(手头有源码的)可以通过修改程序来优化程序性能。以下是几个数据库优化例子,是清风君在给用户维护中的实战经验,成功将客户的网站访问速度由原来的数秒钟提升到毫秒级。

优化实例1:payment_id字段类型错误导致的mysql查询效率低

实例代码:

12select status from sdb_payments where payment_id=15519409588088 LIMIT 0, 1;

sdb_payments的payment_id虽然内容是数字,不过类型却是varchar,这里没有加单引号,会导致mysql转类型,耗时太长。

解决办法:

1)、修改程序,把payment_id加上单引号,

2)、能确定数据库这个字段内容全部是数字的话,直接修改字段类型为TINYINT。

优化实例2:订单表过大导致的查询缓慢

实例代码:

12345SELECT order_id FROM sdb_orders WHERE 1551978066>cancel_time AND pay_status='0' AND ship_status='0' AND status='active';

电商网站运营久了,最明显的就是订单表越来越大,导致查询效率越来越低。

解决办法:给订单表增加pay_status、ship_status、status 索引

优化实例3:

实例代码:

1234select from sdb_orders where disabled="false" AND member_id=8356 AND order_refer="local" AND isparent="false" order by createtime desc LIMIT 0, 20;

原因和实例2一样。

解决办法:

增加 member_id、disabled、order_refer、isparent 索引

优化实例4:

实例代码:

12345SELECT queue_id,data,tmpl_name,target,title,event_name,sender,messageFROM sdb_msgqueue WHERE status='ready' OR (status='locking' AND send_time<1551940735 AND send_time>1551933655) ORDER BY level DESC LIMIT 0, 7;

由于shopex的站内消息不会自动清除,msgqueue表会越来越大,而每次客户提交订单时,又开启了自动发送短信或邮件提醒功能,所以会触发发送站内和邮件信息,导致提交订单明显卡顿。

解决办法:

sdb_msgqueue 表增加status、send_time 索引。

以上是几个优化实例,具体应该根据网站的运营数据和网站内容进行相应分析处理。如果有这方面的需求,欢迎与我们联系。

原创文章,作者:Zhang Miao Miao,如若转载,请注明出处:https://www.yidc.net/archives/16476