暂无图片
mysql表关联问题
我来答
分享
紫气东来
2020-07-30
mysql表关联问题

SQL语句:
SELECT
a.bill_id,
a.goods_id,
sum( a.col1) ,
sum( a.col2 ),
sum( a.col3 ),
sum( b.col1 ),
sum( b.col2 )
FROM
a LEFT JOIN b ON a.detail_id = b.id
WHERE
a.delete_flag = 0
AND a.tena_id = ‘xxxxxxxx’
AND a.bill_id IN (1000个左右)
GROUP BY
a.bill_id,
a.goods_id;

表信息:
a表370W数据,存在联合索引(tena_id,delete_flag,bill_id,goods_id)
b表270W数据,id是主键
SQL查询结果5000-10000条左右

上面SQL第一次执行总是很慢,30S左右,后面再执行就很快不到1s。
查看profile发现时间都耗在sending data上,如下是具体信息,请教下各位这是什么原因
image.png

image.png

我来答
添加附件
收藏
分享
问题补充
3条回答
默认
最新
张sir

第一次把数据加载到buffer pool 了,以后执行就快了,sending data是收集和发送数据,

暂无图片 评论
暂无图片 有用 0
打赏 0
紫气东来

但是我这个查询的结果集也不大,最多1W行,关联和过滤都用到了索引,但是读取的block却很大,会和关联字段的类型有关系吗? a.detail_id = b.id 都是char(32)类型的

暂无图片 评论
暂无图片 有用 0
打赏 0
张sir

optimize一下表,是不是碎片太多了?查一下表的大小和表文件大小是不是差别比较大?

暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
mysql如何查看所有复合主键的表名?
回答 2
已采纳
查询mysql.indexes里面
mysqlbinlog解析的日志,条件有=NULL,但是MySQL里面只有is null的时候才会出来?
回答 1
已采纳
行模式下,所有字段都解析出来,null代表空。‘’是说原来存的是空格。
rpm包安装mysql8.0,配置文件不是/etc/my.cnf,怎么修改配置?
回答 1
在/etc/my.cnf里面先配置一下mysql相关的配置项安装mysql8.0的rpm包将my.cnf文件移动到你想要的位置启动mysql服务mysqld mysqlddefaultsfi
mysql按照主键更新很慢原因怎么排查?大概有100万的数据量,存储的主要是图片
回答 1
存储图片的地址?还是二进制信息?执行计划看看是不是走的主键
MySQL ON DUPLICATE KEY UPDATE 可以同时更新两个字段吗?
回答 3
可以的createtabletest3(id1int,id2int,id3int,primarykey(id1));insertintotest3values(1,1,1),(2,2,2)INSERT
MYSQL 数据库设计上 的枚举数据 用int 还是 string,理由是什么?
回答 2
已采纳
根据我实际经验来看,用int可以减少数据库的存储及前后端交互的数据大小,但缺点是数字本身无法代表对应的业务含义,在开发运维调试的时候需要反复去找对照关系,效率低。不过如果枚举值少的话,多搞几次就记得了
Mysql数据库里有多张表需要全量更新(删除所有数据重新写入),要么全部表更新成功要么全部表不更新,总的数据量大概在百万左右
回答 2
已采纳
第二个方案比较好,可以写个通用的工具脚本,防止出错。另外这种全量更新应该频次不频繁,如果比较频繁或者周期比较短,要考虑需求的合理性
mysql8.4.2错误日志不停刷MY-013935错误
回答 3
检查一下IO和磁盘。在一个很垃圾的vmware虚拟机中遇到过这个情况,换了磁盘就解决了
REPEAT 语句与 WHILE 语句有什么异同?
回答 2
已采纳
①都可以用于创建一个带有条件判断的循环过程。②WHILE在语句执行时,先对指定的表达式进行判断,符合条件再执行循环体;而REPEAT先执行循环体,然后再进行条件判断。
mysql备份策略一般用mysqldump吗?
回答 2
建议看看小墨的这篇文章,《MySQL备份方式》https://www.modb.pro/doc/1177