最近公司计划将风控逻辑移到slave库进行计算,因为考虑到业务表数据会比较大,此时如果还是走nest-loop的话,即使unique进行连接,因为还是需要至少2次以上LIO才能读一条记录,如果达到类似hash join效果的话,在大数据量下,性能通常可以大幅度提升。

因为memory引擎支持hash索引,根据mysql官方文档所述,其基本用途就是K/V存储,内部使用map而非b-tree的实现机制,这样来看,理论上确实达到了hash join的基础。所以,特地做了测试如下:

drop table tb_act_productunitasset_his_test_mem;
create table tb_act_productunitasset_his_test_mem like tb_act_productunitasset_his_test;
delete from tb_act_productunitasset_his_test_mem;
insert into tb_act_productunitasset_his_test_mem select * from tb_act_productunitasset_his_test_mem;
commit;
select count(1) from tb_act_productunitasset_his_test_mem;

在两个表各自的init_date,company_no,unit_code,product_id上包含了非唯一索引,其中XXX_test为btree索引,XXX_test_mem为hash索引。

278432

select u.unit_code,sum(init_asset),sum(original_amt)
from tb_act_unitaccount_his u,tb_act_productunitasset_his_test_mem p
where u.init_date = p.init_date
and u.company_no = p.company_no
and u.unit_code = p.unit_code
and u.product_id = p.product_id
group by u.unit_code

select u.unit_code,sum(init_asset),sum(original_amt)
from tb_act_unitaccount_his u,tb_act_productunitasset_his_test p
where u.init_date = p.init_date
and u.company_no = p.company_no
and u.unit_code = p.unit_code
and u.product_id = p.product_id
group by u.unit_code

从delete、insert来看,memory均性能高倍,因为memory存储的时候直接计算hash值,所以比btree快,这是完全意料中的。

因为测试环境,造实际的业务逻辑比较麻烦,实际业务系统中,可以认为,hash成为unique完全是可以的,比如就算资产表、交易委托表、成交表等都是可以做到的,只不过条件可能是变量值,而不是另外一张关联表而已。

所以,只要DML控制的好同时在mysql启动的时候,通过init-file启动后执行的命令进行初始化加载,很多常用的资料表和当前业务周期表都可以镜像一份memory,在读多写少的系统上,性能提升会非常明显。

mysql memory表性能测试以及使用场景的更多相关文章

  1. MySQL内存表(MEMORY)说明 | 一个PHP程序员的备忘录

    MySQL内存表(MEMORY)说明 | 一个PHP程序员的备忘录 MySQL内存表(MEMORY)说明

  2. mysql分表场景分析与简单分表操作

    为什么要分表 首先要知道什么情况下,才需要分表个人觉得单表记录条数达到百万到千万级别时就要使用分表了,分表的目的就在于此,减小数据库的负担,缩短查询时间. 表分割有两种方式: 1水平分割:根据一列或多 ...

  3. 详解MySQL大表优化方案( 转)

    当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部署.运维的各种复杂度,一般以整型 ...

  4. MySQL 大表优化方案探讨

    当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部署.运维的各种复杂度,一般以整型 ...

  5. MySQL大表优化方案

    转:https://segmentfault.com/a/1190000006158186?hmsr=toutiao.io&utm_medium=toutiao.io&utm_sour ...

  6. MySQL 大表优化方案

    当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部署.运维的各种复杂度,一般以整型 ...

  7. 优秀后端架构师必会知识:史上最全MySQL大表优化方案总结

    本文原作者“ manong”,原创发表于segmentfault,原文链接:segmentfault.com/a/1190000006158186 1.引言   MySQL作为开源技术的代表作之一,是 ...

  8. MySQL 大表优化方案(长文)

    当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部署.运维的各种复杂度,一般以整型 ...

  9. MySQL大表优化方案 Mysql的row_format(fixed与dynamic)

    转自:https://mp.weixin.qq.com/s/VY69wWlrVLjRtKU7ULrYGw 当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除 ...

随机推荐

  1. ui-router API

    ui-router API 英文不咋地感觉找个API都要找半天, 拿好不谢 http://angular-ui.github.io/ui-router/site/#/api/ui.router

  2. css基础总结一

    最近在弄一个简单管理系统的前端,所以打算将做项目的一些个人感想以及总结简单罗列下,当然,主要针对前端的基础部分以及一些常用的前端个人简单技巧总结.主要分为js部分和css部分,下面是css的基础部分总 ...

  3. 深入入门系列--Data Structure--04树

    终于有机会重新回头学习一下一直困扰自身多年的数据结构了,赶脚棒棒哒.一直以来,对数据结构的掌握基本局限于线性表,稍微对树有一丢丢了解,而对于图那基本上就是不懂(不可否认,很多的考试中回避了图也是原因之 ...

  4. gridview里日期显示格式

    Text='<%#Bind("EndDate","{0:yyyy-MM-dd}") %>'

  5. CSS默认可继承样式

    前面的话 一直想总结出一份可继承样式的列表.常听说,颜色和字体是可继承的,盒模型样式是不可继承的,但其他样式呢?本文内容包括所有可继承的样式 [注意]关于样式的详细信息移步至此 常用可继承样式 col ...

  6. MFC 字符串类CString 源代码

    原文:http://blog.csdn.net/benny5609/article/details/1926088 CString使用的是引用技术,可以共享数据(这个大家都知道),另外空的CStirn ...

  7. 轻松自动化---selenium-webdriver(python) (九)

    本节重点: 上传文件 文件上传操作也比较常见功能之一,上传功能没有用到新有方法或函数,关键是思路. 上传过程一般要打开一个本地窗口,从窗口选择本地文件添加.所以,一般会卡在如何操作本地窗口添加上传文件 ...

  8. 可视化工具gephi源码探秘(二)---导入netbeans

    在上篇<可视化工具gephi源码探秘(一)>中主要介绍了如何将gephi的源码导入myeclipse中遇到的一些问题,此篇接着上篇而来,主要讲解当下通过myeclipse导入gephi源码 ...

  9. wordpress和普通网页如何使用百度分享组件

    百度分享组件是什么?摘自百度百科: 百度分享是一个提供网页地址收藏.分享及发送的WEB2.0按钮工具,网站的浏览者可以方便的分享到人人网.分享到开心网.分享到QQ空间.分享到新浪微博等一系列SNS站点 ...

  10. js基础篇——call/apply、arguments、undefined/null

    a.call和apply方法详解 call方法: 语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象 ...