我希望得到一个项目#QTYs的SUM分组为几个月,查询需要太长时间(15 – 20)秒才能获取.

– 总行数:1495873

-Total Fetched rows:9 – 12

两个表(invoice_header和invoice_detail)之间的关系是(一对多),invoice_header是发票的标题,只有总计.使用位置ID(loc_id)和发票编号(invo_no)链接到invoice_detail,因为每个位置都有自己的序列号.发票明细包含每张发票的详细信息.

有没有更好的方法来增强该查询的性能,这里是:

SELECT SUM(invoice_detail.qty) AS qty, Month(invoice_header.date) AS month

FROM invoice_detail

JOIN invoice_header ON invoice_detail.invo_no = invoice_header.invo_no

AND invoice_detail.loc_id = invoice_header.loc_id

WHERE invoice_detail.item_id = {$itemId}

GROUP BY Month(invoice_header.date)

ORDER BY Month(invoice_header.date)

说明:

invoice_header表结构:

CREATE TABLE `invoice_header` (

`invo_type` varchar(1) NOT NULL,

`invo_no` int(20) NOT NULL AUTO_INCREMENT,

`invo_code` varchar(50) NOT NULL,

`date` date NOT NULL,

`time` time NOT NULL,

`cust_id` int(11) NOT NULL,

`loc_id` int(3) NOT NULL,

`cash_man_id` int(11) NOT NULL,

`sales_man_id` int(11) NOT NULL,

`ref_invo_no` int(20) NOT NULL,

`total_amount` decimal(19,2) NOT NULL,

`tax` decimal(19,2) NOT NULL,

`discount_amount` decimal(19,2) NOT NULL,

`net_value` decimal(19,2) NOT NULL,

`split` decimal(19,2) NOT NULL,

`qty` int(11) NOT NULL,

`payment_type_id` varchar(20) NOT NULL,

`comments` varchar(255) NOT NULL,

PRIMARY KEY (`invo_no`,`loc_id`)

) ENGINE=InnoDB AUTO_INCREMENT=20286 DEFAULT CHARSET=utf8

invoice_detail表结构:

CREATE TABLE `invoice_detail` (

`invo_no` int(11) NOT NULL,

`loc_id` int(3) NOT NULL,

`serial` int(11) NOT NULL,

`item_id` varchar(11) NOT NULL,

`size_id` int(5) NOT NULL,

`qty` int(11) NOT NULL,

`rtp` decimal(19,2) NOT NULL,

`type` tinyint(1) NOT NULL,

PRIMARY KEY (`invo_no`,`loc_id`,`serial`),

KEY `item_id` (`item_id`),

KEY `size_id` (`size_id`),

KEY `invo_no` (`invo_no`),

KEY `serial` (`serial`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8

解决方法:

遵循SQL需要多长时间?

SELECT count(*)

FROM invoice_detail

WHERE invoice_detail.item_id = {$itemId}

如果此SQL需要15-20秒,则应在inovice_detail表的字段item_id上添加索引.

invoice_header已在invo_no和loc_id的连接列上拥有主键,因此您无需在invoice_header表上添加其他索引.但是如果你在字段invo_no,loc_id和date上添加一个索引,那么只能通过索引扫描来增强一点性能.

标签:mysql,sql,sql-execution-plan,performance

来源: https://codeday.me/bug/20190703/1362962.html

mysql 性能 比较好_更好的MySQL查询性能相关推荐

  1. 《MySQL开发规范》过时了,视图的查询性能提升了一万倍

    MySQL 8.0新特性专栏目录 <MySQL开发规范>过时了,视图查询性能提升了一万倍 你真的会用EXPLAIN么,SQL性能优化王者晋级之路 索引三剑客之降序索引和不可见索引 千呼万唤 ...

  2. mysql事件探查器_【干货】Mysql的事件探查器-之Mysql-Proxy代理实战一(安装部署与实战sql拦截与性能监控)...

    1:资料参考 https://blog.csdn.net/coldljy/article/details/3168906 https://www.cnblogs.com/jwentest/p/8552 ...

  3. mysql 复制延迟诊断_新特性解读 | MySQL 8 复制延迟观测新方式,更全面更精准

    转载自公众号:玩转MySQL,作者:洪斌 一直以来 MySQL 复制延迟观测是不完善的,既无法观测到真实的主从延迟,也无法支持复杂的复制拓扑环境,常用的 second_behind_master 指标 ...

  4. mysql崩溃恢复过程_一起看下MySQL的崩溃恢复到底是怎么回事

    思考一个问题 为什么在你当update时,事物提交之前先不断的写redo log呢? 如果你看过白日梦前面介绍buffer pool的文章,这个问题的答案想必你也能很快的想出来:MySQL为了提高性能 ...

  5. mysql对测试如何_我如何对MySQL进行基准测试?

    我目前正在使用MySQL工作台.我希望看到表中行数增加时性能的差异.我想专门测试并比较1000行,10,000行,100,000行,1,000,000行和10,000,000行. 那么,是否有任何工具 ...

  6. mysql 8.0空间索引_牛逼!MySQL 8.0 中的索引可以隐藏了…

    MySQL 8.0 虽然发布很久了,但可能大家都停留在 5.7.x,甚至更老,其实 MySQL 8.0 新增了许多重磅新特性,比如栈长今天要介绍的 "隐藏索引" 或者 " ...

  7. mysql 数据库字符集转换_字符集介绍及mysql数据库编码转换

    一.字符集介绍: 1.ASCII ASCII是英文American Standard Code for Information Interchange的缩写,美国标准信息交换代码是由美国国家标准学会( ...

  8. mysql分频段存_哒哒哒之MySQL

    知识点 事务 ------- **事务是是指一组sql语句组成的数据库逻辑处理单元,在这组的sql操作中,要么全部执行成功,要么全部执行失败. --事务的特性 (ACID) 1. 原子性 (Atomi ...

  9. mysql进程内存不足_故障排除指南:MySQL的运行内存不足怎么办?

    原标题:故障排除指南:MySQL的运行内存不足怎么办? [ ] [IT168 评论]故障排除对于所有人来说都不会是一件有趣的事情,尤其是在没有崩溃报告的情况下.如果MySQL因内存不足而崩溃时应该怎么 ...

最新文章

  1. spring-boot项目优雅的http客户端工具,太香了!
  2. python后端需要什么基础_python做后端好吗
  3. 简述php三元运算符的使用,PHP 三元运算符的使用
  4. Find the safest road(HDU-1596)
  5. HDU1722 Cake【GCD】
  6. FailSafe双机方案
  7. eclipse修改java编译的版本
  8. Web前端开发规范之文件存储位置规范
  9. Apache Wicket 1.5发布
  10. 【图解深度学习】【章节:2-1.1 | 什么是机器学习?】连小学生都能看懂的深度学习基础总结
  11. Google 推出的编程学习应用 Grasshopper
  12. 原生ajax上传获取进度,ajax上传图片获取进度
  13. server: WebGame服务端架构分析
  14. JAVA怎么开发一个胖客户端_胖客户端瘦客户端哑终端
  15. 数据开源 | 跨境电商场景中日平行语料1000
  16. 2023年比较经典的软件测试工程师面试题(自我总结)
  17. 面试题目:2个鸡蛋100层楼问题
  18. win 10使用模拟器蓝屏解决方案
  19. cnpm不是内部命令的解决方案:配置环境变量【推荐】
  20. linux常用命令_Linux常用命令总结

热门文章

  1. IOS旗下基于FFmpeg开发的开源流媒体播放器汇总推荐
  2. [使用教程]使用pycharm自动将代码同步至服务器,并使用服务器的虚拟环境进行调试
  3. 转: SteveY对Amazon和Google平台的长篇大论
  4. 使用windows优化大师清理垃圾文件后,windows2008乱码的问题。
  5. RK3399平台开发系列讲解(内核设备树原理)3.9、内核启动阶段获得dtb位置指针过程介绍
  6. 饿了,你需要的是面包而不是面粉或小麦
  7. DNS地址解析的设置
  8. JS实现购物网站商品放大镜效果
  9. 尝试加载项目属性窗口时出错。请关闭窗口并重试。 值不能为 null。 参数名: val
  10. gfoj 22的应急救援