mysql memory表性能测试以及使用场景
最近公司计划将风控逻辑移到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表性能测试以及使用场景的更多相关文章
- MySQL内存表(MEMORY)说明 | 一个PHP程序员的备忘录
MySQL内存表(MEMORY)说明 | 一个PHP程序员的备忘录 MySQL内存表(MEMORY)说明
- mysql分表场景分析与简单分表操作
为什么要分表 首先要知道什么情况下,才需要分表个人觉得单表记录条数达到百万到千万级别时就要使用分表了,分表的目的就在于此,减小数据库的负担,缩短查询时间. 表分割有两种方式: 1水平分割:根据一列或多 ...
- 详解MySQL大表优化方案( 转)
当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部署.运维的各种复杂度,一般以整型 ...
- MySQL 大表优化方案探讨
当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部署.运维的各种复杂度,一般以整型 ...
- MySQL大表优化方案
转:https://segmentfault.com/a/1190000006158186?hmsr=toutiao.io&utm_medium=toutiao.io&utm_sour ...
- MySQL 大表优化方案
当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部署.运维的各种复杂度,一般以整型 ...
- 优秀后端架构师必会知识:史上最全MySQL大表优化方案总结
本文原作者“ manong”,原创发表于segmentfault,原文链接:segmentfault.com/a/1190000006158186 1.引言 MySQL作为开源技术的代表作之一,是 ...
- MySQL 大表优化方案(长文)
当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部署.运维的各种复杂度,一般以整型 ...
- MySQL大表优化方案 Mysql的row_format(fixed与dynamic)
转自:https://mp.weixin.qq.com/s/VY69wWlrVLjRtKU7ULrYGw 当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除 ...
随机推荐
- Python装饰器详解
python中的装饰器是一个用得非常多的东西,我们可以把一些特定的方法.通用的方法写成一个个装饰器,这就为调用这些方法提供一个非常大的便利,如此提高我们代码的可读性以及简洁性,以及可扩展性. 在学习p ...
- 快速入门系列--GIT版本控制工具
由于GIT刚刚开始使用不久,经常会在Merge时出现没有change-id的情况,在结合gerrit使用时,经常出现不能提交的情形,使得自己很困扰.最近有次熬夜加班,在代码完成后,由于多人在很短时间内 ...
- CSS3伸缩布局Flex学习笔记
如果需要使用伸缩布局首先得把display:flex;对于兼容还得加前缀display:-webkit-display:flex;等其他浏览器前缀,但我本机Chrome测试已经不需要加前缀了,其实这些 ...
- 用javascript动态创建并提交表单form,表格table
<script> //helper function to create the formfunction getNewSubmitForm(){ var submitForm = doc ...
- CSS 性能
http://boagworld.com/dev/why-you-should-care-about-css-page-performance/ http://css-tricks.com/effic ...
- MyEclipse使用总结——MyEclipse10安装SVN插件
一.下载SVN插件subclipse 下载地址:http://subclipse.tigris.org/servlets/ProjectDocumentList?folderID=2240 在打开的网 ...
- svn的安装与使用
Eclipse安装SVN插件 1.下载最新的Eclipse,我的版本是3.7.2 indigo(Eclipse IDE for Java EE Developers)版 如果没有安装的请到这里下载安装 ...
- 队列的存储结构和常见操作(c 语言实现)
一.队列(queue) 队列和栈一样,在实际程序的算法设计和计算机一些其他分支里,都有很多重要的应用,比如计算机操作系统对进程 or 作业的优先级调度算法,对离散事件的模拟算法,还有计算机主机和外部设 ...
- BrowserSync - 浏览器同步测试工具
背景: 之前在学gulp的时候,使用gulp-livereload来实时自动刷新页面省时开发,但一直比较难用,现在找到新的替代神器. 安装: // 使用淘宝镜像会快些 npm install -g ...
- 用vue实现模态框组件
基本上每个项目都需要用到模态框组件,由于在最近的项目中,alert组件和confirm是两套完全不一样的设计,所以我将他们分成了两个组件,本文主要讨论的是confirm组件的实现. 组件结构 < ...