快速发布收录 推广展示
早上好, 游客 <游客> [ 马上登录 | 注册帐号 ]
首页 建站经验 正文

MySQL篇:提高连表查询的性能,有哪些方法?

发布时间:2024-09-02 更新日期:2024-09-16 作者: 16757网址导航 阅读:92 次

引发连表查询出现的原因是什么?在对一个业务进行表结构设计时,肯定要分很多张表,不同的表承载不同的数据,各种数据相互关联,共同支撑业务。表结构设计有很多技巧和原则,比如冗余性设计、数据库范式、反范式等,总之不管如何设计,一张表是无法承载所有业务的,必须分成不同的表。MySQL因为存在多张表,当超出单张表字段的查询需求出现时,就产生了MySQL连表查询。MySQL连表查询简介MySQL的连表查询,分为内连接、外连接查询两种类型,其中外连接查询又分为左外连接和右外连接查询。内连接语法:select * from t1,t2;select * from t1 join t2;select * from t1 inner join t2;select * from t1 cross join t2;其中,前面的t1表为驱动表,后面的t2表为被驱动表。内连接就是数学中的笛卡尔积,假设t1表有3条记录,t2有5条记录,则执行上面的SQL语句之后结果集有3*5=15条记录。select * from t1;select * from t2;select * from t1,t2;外连接语法:右连接:SELECT* FROM tl RIGHT [OUTER] JOIN t2 ON 连接条件 [where 普通过滤条件];左连接:SELECT* FROM tl LEFT [OUTER] JOIN t2 ON 连接条件 [where 普通过滤条件];其中,t1为驱动表,t2为被驱动表,以t1表为驱动表,首先过滤t1表的记录,根据t1表的记录,逐条去t2表查询符合条件的记录,然后组合为一条记录,直至完成全部组装。连接查询的优化方式拆分连表查询为单表查询,通过程序组装结果集,返回给客户端;如果没有实时性、强一致性要求,可以全部缓存到redis,定时更新缓存,直接从缓存取数据;改变驱动表或被驱动表的访问方法:ALL——》index——》range——》ref_or_null——》ref——》const;驱动表和被驱动表的过滤条件最好用主键或者唯一二级索引;增大join buffer size的大小,增大被驱动表的缓存数据,减少驱动表的扫描次数;减少不必要的字段查询,避免引起不必要的回表,减少join buffer的缓存数据量,增大缓存记录数;总结性能优化只能是从战术层面解决问题或者存在的bug,因为随着数据量的增长,包括记录数目、存储大小的不断增长,任何战术层面的性能优化总归是无法处理的。战略层面要考虑分库分表或者采用分布式数据库,比如OceanBase、Tidb等。技术上升到一定的层面就不是单纯的技术问题了,一切学科都是相通的了。

共收录0个网站,0个公众号,0个小程序,0个资讯文章,0个微信文章
首页 关于我们 联系我们 广告合作 免责声明 友情链接 TAGS标签
点击收藏小提示:按键盘CTRL+D也能收藏哦!
网站声明:本站所有资料取之于互联网,任何公司或个人参考使用本资料请自辨真伪、后果自负,不承担任何责任。在此特别感谢您对分类目录网的支持与厚爱!
16757分类目录版权所有©(2006-2025)16757.COM All Rights Reserved.   黔ICP备19007148号-10