wp_order_goods有200多万行的数据,查询特别慢,怎么优化好,贴上sql代码和业务逻辑代码,谢谢。

wenlong_15 2020-08-13 10:49:29
wp_order_goods有200多万行的数据,查询特别慢,怎么优化好,贴上sql代码和业务逻辑代码
--------------
SELECT `g`.`isgifts`,`og`.`giftssku`,`og`.`giftsname`,`og`.`costprice`,`og`.`amount_real`,`sp`.`v1`,`order`.`uid`,`order`.`openid`,`og`.`supplier_id`,`order`.`order_status`,`order`.`order_amount`,`order`.`second_paid_amount`,`og`.`wenqu`,og.brand_id as brandid,og.cate_id as cateid,`og`.`merchant_id`,`og`.`created`,`order`.`book_time`,`order`.`id`,`order`.`order_sn`,`og`.`sku`,`og`.`number`,`og`.`price`,`og`.`product_amount`,`order`.`consignee`,`order`.`cellphone`,`order`.`gtype`,`og`.`goods_name`,`og`.`sa_name`,`og`.`sv_name`,`og`.`arrival_time`,`og`.`token`,`og`.`og_status`,`order`.`payment_id` FROM `wp_order_goods` `og` INNER JOIN `wp_order` `order` ON `og`.`order_sn`=`order`.`order_sn` LEFT JOIN `wp_goods_spec` `sp` ON `og`.`gid`=`sp`.`gid` LEFT JOIN `wp_goods` `g` ON `og`.`gid`=`g`.`id` WHERE ( order.isdel=0 and og.sku NOT IN ('ZH15224538','ZH15220918') and order.jl_status=0 and og.og_status IN (300,400,500,600,1500,2200,2400) and order.created BETWEEN '1546272000' and '1546358400' )
------------
$orders = Db::table('wp_order_goods')
->alias('og') //订单表
->join('wp_order order', 'og.order_sn=order.order_sn')
->join('wp_goods_spec sp', 'og.gid=sp.gid', 'left')
->join('wp_goods g', 'og.gid=g.id', 'left')
->field('g.isgifts,og.giftssku,og.giftsname,og.costprice,og.amount_real,sp.v1,order.uid,order.openid,og.supplier_id,order.order_status,order.order_amount,order.second_paid_amount,og.wenqu,og.brand_id as brandid,og.cate_id as cateid,og.merchant_id,og.created,order.book_time,order.id,order.order_sn,og.sku,og.number,og.price,og.product_amount,order.consignee,order.cellphone,order.gtype,og.goods_name,og.sa_name,og.sv_name,og.arrival_time,og.token,og.og_status,order.payment_id')
->where($where)
->select();
------------
使用的是thinkphp5.013版本框架,谢谢!
...全文
168 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
horizon_zpy 2020-08-14
  • 打赏
  • 举报
回复
leFT JOIN `

这个费时,感觉要快,需要合并成一张表,空间换时间
wenlong_15 2020-08-13
  • 打赏
  • 举报
回复
MySQL版本:5.6
wenlong_15 2020-08-13
  • 打赏
  • 举报
回复
引用 2 楼 下雨的声音丶 的回复:
join这么多表,试一下拆分开看看情况呢
怎么拆分?
::::::::: 2020-08-13
  • 打赏
  • 举报
回复
先试试把后端数据库中的相关类型用模型去做关联处理,thinkPHP中模型具有预加载的好处。而DB类会直接使用原生语句读取数据库,如果数据库查询的量大就会变得很慢。关联后模型如果还是慢的话这时候你需要在对应的模型下面去修改对应的SQL语句,也就是常说的优化SQL语句,再用对应的thinkPHP中的链接操作去改写。如何测试SQL语句的快慢 可以使用MYSQL内置工具explain工具,或者使用Navicat中的explain去分析语句。关于TP5模型相关的使用,可以参考我写的这篇文章,有简单的demo,图文并茂。链接(https://blog.csdn.net/qq_39338006)左边分类专栏里面找THinkPHP那一栏,里面有你需要的文章。
下雨的声音丶 2020-08-13
  • 打赏
  • 举报
回复
join这么多表,试一下拆分开看看情况呢

4,251

社区成员

发帖
与我相关
我的任务
社区描述
国内外优秀PHP框架讨论学习
社区管理员
  • Framework
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧