shopex4.8.5是商派早年推出的一个基于php5.2平台的半开源电子商务建站软件,曾经一度有50多万用户使用。不过近年来更新比较少,加上有新的产品推出,官方对shopex的维护力度大不如前。很多用户在使用中,发现并发到一定量时,网站访问速度就明显下降。由于shopex是并开源产品,只有专业的开发人员(手头有源码的)可以通过修改程序来优化程序性能。以下是几个数据库优化例子,是清风君在给用户维护中的实战经验,成功将客户的网站访问速度由原来的数秒钟提升到毫秒级。
优化实例1:payment_id字段类型错误导致的mysql查询效率低
实例代码:
select status from sdb_payments where payment_id=15519409588088 LIMIT 0, 1;
sdb_payments的payment_id虽然内容是数字,不过类型却是varchar,这里没有加单引号,会导致mysql转类型,耗时太长。
解决办法:
1)、修改程序,把payment_id加上单引号,
2)、能确定数据库这个字段内容全部是数字的话,直接修改字段类型为TINYINT。
优化实例2:订单表过大导致的查询缓慢
实例代码:
SELECT 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:
实例代码:
select * 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:
实例代码:
SELECT queue_id,data,tmpl_name,target,title,event_name,sender,message FROM 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 索引。
以上是几个优化实例,具体应该根据网站的运营数据和网站内容进行相应分析处理。如果有这方面的需求,欢迎与我们联系。