当前位置: 首页 > news >正文

处理mysql数据量大查询缓慢问题(最少百万才有差别)

     我建了两个表,一个售后单表,一个售后商品明细表,都是五十个字段。

select *
FROM (select id, as_id, as_date, outer_as_id, so_id, type, created, modified, status, status_name, shop_status, shop_status_name, remark, question_type, warehouse, refund, payment, good_status, good_status_name, node, order_status, order_status_name, shop_type, shop_id, logistics_company, wh_id, confirm_date, freight, drp_co_id_from, receiver_mobile, receiver_name, shop_buyer_id, buyer_apply_refund, result, drp_co_id_to, items_id, labels, refund_version, ts, shop_name, shop_freight, currency, o_id, l_id, creator_name, refund_phase, orderlabels, batchs_id, wms_co_id, COALESCE(CAST(refund AS DECIMAL(10, 2)), 0) + COALESCE(CAST(freight AS DECIMAL(10, 2)), 0) - COALESCE(CAST(free_amount AS DECIMAL(10, 2)), 0) - COALESCE(CAST(payment AS DECIMAL(10, 2)), 0) AS refundable_amount
FROM zuodou_task_datas )a1
LEFT JOIN (select t2.id a2id,IFNULL(t1.r_qty,0) r_qty,IFNULL(t1.qty,0) qty,t2.i_id
FROM (select id c1id,IFNULL(sum(r_qty),0) r_qty,IFNULL(sum(qty),0) qty
FROM zuodou_task_item
WHERE type in ('退货','其他') GROUP BY id)t1
RIGHT JOIN (select id,GROUP_CONCAT(sku_id) AS i_id
FROM zuodou_task_item GROUP BY id)t2
ON t1.c1id=t2.id )a2
ON a1.items_id=a2.a2id ORDER BY created desc
LIMIT 10;

我秉承着能sql解决就用sql解决,但发现很慢就开启排查之路,我把数据导入到我本地,运行同样的sql很快一秒都不到,但阿里云服务器上面mysql运行就是不快,已经添加了唯一索引和普通索引,关联字段,查询条件字段,排序字段。

考虑是服务器(四核16g)不行,想这把4核全部给mysql 在my.conf中配置

innodb_read_io_threads=16#默认4

 innodb_write_io_threads=16#默认4,改为你的cpu逻辑数量

快了三十秒左右,很不错,以为是服务器原因了。

想想还有什么优化的地方

字段太多了?,删到了二十几个,快了十秒左右。

服务器配置看不懂,阿里云客服建议用云数据库,试用了,确实挺快。花钱就不香了

继续看sql,一条一条运行,发现是把分页放到了a1后面,快了,16秒

继续发现,查询datas表很快

select t2.id a2id,IFNULL(t1.r_qty,0) r_qty,IFNULL(t1.qty,0) qty,t2.i_id
FROM (select id c1id,IFNULL(sum(r_qty),0) r_qty,IFNULL(sum(qty),0) qty
FROM zuodou_task_item
WHERE type in ('退货','其他') GROUP BY id)t1
RIGHT JOIN (select id,GROUP_CONCAT(sku_id) AS i_id
FROM zuodou_task_item GROUP BY id)t2
ON t1.c1id=t2.id

就是这个sql很慢,我的需求是,退货/其他不同的id  的拿到qty和r_qty,还需要把同一id的商品编码GROUP_CONCAT(sku_id),按照逗号分割

一句点醒梦中人,我只要datas a1分页后的几条数据坐处理,想到一个解决办法,根据指定关联items_id  和id去查。一试用,快得很。

我就把以上sql段单独运行,加上 in  id() 完美解决查询慢的问题

总结:

对于这些关查询慢的问题尽量让他缩小区间,sql没什么问题的话加几个适合的索引,轻轻松松解决。

如果这些问题还不能就试试,代码,sql相结合。

最后还不行就考虑垂直分区,水平分区,读写分离,集群。

最最最后还不行,就可以买新服务器了(为公司省钱的员工,老板最爱)!

http://www.lryc.cn/news/212845.html

相关文章:

  • element-plus走马灯不显示
  • 【精】UML及软件管理工具汇总
  • 【uniapp+vue3】scroll-view实现纵向自动滚动及swiper实现纵向自动滚动
  • this.refs[‘tagInput‘].refs.input.focus()和this.$refs[‘tagInput‘].focus()区别
  • 电脑硬件坏了,如何维修?
  • elementplus日期时间选择器组件显示很窄
  • 第三方软件测评选择远程测试好还是现场测试好?
  • HTTPS协议:保障网络安全的加密通信协议
  • C++设计模式_21_Iterator 迭代器(理解;面向对象的迭代器已过时;C++中使用泛型编程的方式实现)
  • 有一个 3*4 的矩阵,找出其中值最大的元素,及其行列号
  • 磁盘的命令
  • 一张图讲清楚业务稳定性要如何做:SRE体系化稳定性方案
  • 安卓端GB28181设备接入模块如何实现实时位置订阅(MobilePosition)
  • 11.与JavaScript深入交流-[js一篇通]
  • Ubuntu 搭建 DHCP ivp6 server 步骤
  • 分享大数据分析师前景怎么样? 从事行业有哪些?
  • 通过wordpress能搭建有影响力的帮助中心
  • word页脚设置,页脚显示第几页共有几页设置步骤
  • C语言实现斐波那契数列的多种方法
  • 一文解决:Swagger API 未授权访问漏洞问题
  • Elasticsearch下载安装,IK分词器、Kibana下载安装使用,elasticsearch使用演示
  • springboot自定义404页面
  • C/C++数据结构之时间复杂度和空间复杂度详细解析以及力扣刷题
  • 【需要理解】80 单词搜索
  • 笔记本电脑的键盘鼠标如何共享控制另外一台电脑
  • 【计算机网络】(谢希仁第八版)第二章课后习题答案
  • 笔记软件Notability mac中文版软件功能
  • 【C++的OpenCV】第十四课-OpenCV基础强化(三):Mat元素的访问之data和step属性
  • Springmvc 讲解(1)
  • 超级英雄的导航之旅:动态路由和嵌套路由