的存储引擎可能是所有关系型产品中最具有特色的了,不仅可以同时使用多种存储引擎,而且每种存储引擎和MySQL之间使用插件方式这种非常松的耦合关系。

Eb$d8lR;Tw0由于各存储引擎功能特性差异较大,这篇主要是介绍如何来选择合适的存储引擎来应对不同的业务场景。(Ks

I&@z5]051Testing软件测试网1Wgon?L3o"W]NJ['P%Yb0

P!pv"a VTL0Wr:nz:YHsUd051Testing软件测试网:r%h?#V7{

51Testing软件测试网Yo_-R"UT:{

Q4xV3La051Testing软件测试网p.i Qy[GI~Q{

/_BK$ND051Testing软件测试网D1wx{3aa5s-a6G#X

NOjNSG^^0MyISAM51Testing软件测试网]c

C\4vq|51Testing软件测试网:q

R)?Y&gy5Q@+lgL

1、特性r e&m$NX:OH_Y0

\tz3]J

LCI0不支持事务:MyISAM存储引擎不支持事务,所以对事务有要求的业务场景不能使用"Y kK#?K"q-X0

(n6`8e?Ch0表级锁定:其锁定机制是表级索引,这虽然可以让锁定的实现成本很小但是也同时大大降低了其并发性能51Testing软件测试网DT0S;ihq

8OqQGb9L(~3[1Z(o0读写互相阻塞:不仅会在写入的时候阻塞读取,MyISAM还会在读取的时候阻塞写入,但读本身并不会阻塞另外的读#zs4p:z2G8v+\f?u0

s)tXc1g:lT*JC0只会缓存索引:MyISAM可以通过key_buffer缓存以大大提高访问性能减少磁盘IO,但是这个缓存区只会缓存索引,而不会缓存数据]A!y8Td0

9A1JF}j02、适用场景{!Xi$Lx9A~L9x1~~6f7w051Testing软件测试网+g+asgUF

不需要事务支持(不支持)*XAq#v/ZV%|051Testing软件测试网Ly0RikK

并发相对较低(锁定机制问题)/SNDzCC8~*x0

0u}OyT0数据修改相对较少(阻塞问题)51Testing软件测试网^XRdGW\

V-@DO5Di0以读为主51Testing软件测试网AC#BLnq$A\Zx

3EbUv(CON'mU0数据一致性要求不是非常高`[i#j+y`'N*ZGD051Testing软件测试网gT,h@0S8Rz

3、最佳实践51Testing软件测试网Zy v ` n

k Y2C"m~Dp$x0尽量索引(缓存机制)k3qNb,E7],Se#J9Q051Testing软件测试网vY2Q"B]Xn7F$PE

调整读写优先级,根据实际需求确保重要操作更优先$~5Q2i~cs\P051Testing软件测试网7F:Q#uj-BK/U/A

启用延迟插入改善大批量写入性能51Testing软件测试网9eXi

]w(\%|Tq]

W` `nh#Q5j@Y0尽量顺序操作让insert数据都写入到尾部,减少阻塞I1?g#[M051Testing软件测试网f"ce4u~{d;R

分解大的操作,降低单个操作的阻塞时间51Testing软件测试网^5o]"|IlM&t3C51Testing软件测试网m,[(xp8L1s

降低并发数,某些高并发场景通过应用来进行排队机制51Testing软件测试网D+tP Tg$t51Testing软件测试网IFR?"JQ5j)NC

对于相对静态的数据,充分利用Query Cache可以极大的提高访问效率51Testing软件测试网-p2q

\6}-Y O"l51Testing软件测试网 WT.gY

rsl3l5bJ

MyISAM的Count只有在全表扫描的时候特别高效,带有其他条件的count都需要进行实际的数据访问51Testing软件测试网TdB$R!A*u5_X51Testing软件测试网/\/dc#c'|k]

InnoDB51Testing软件测试网7r F%XE9NJc-~Ru

v8E3U6lS Y8x01、特性51Testing软件测试网)nc+m'PB;Ex

~ei.i iy"k4bX |0具有较好的事务支持:支持4个事务隔离级别,支持多版本读51Testing软件测试网7w"Jh6Vr51Testing软件测试网$B\(m;W)@)Lz4j

行级锁定:通过索引实现,全表扫描仍然会是表锁,注意间隙锁的影响51Testing软件测试网.?s,R"V$X0cn-l

$iQj4FV'Awc%[$dD0读写阻塞与事务隔离级别相关51Testing软件测试网)v;af+T*U!H4J\

s51Testing软件测试网+HcE Iy

具有非常高效的缓存特性:能缓存索引,也能缓存数据gNen*?ojgYs0SF051Testing软件测试网cZav&i.vam

整个表和主键以Cluster方式存储,组成一颗平衡树51Testing软件测试网.?bq!W,b-B

&e'A7S!d-|)S{A7^/F0所有Secondary Index都会保存主键信息@,l-`0[-XV6W7u0

jF(Se

T\-e*H02、适用场景51Testing软件测试网$_Szs};d _!ph51Testing软件测试网M+b` e^kxl

需要事务支持(具有较好的事务特性)#pE1BU0[2d051Testing软件测试网u8?K8ay

O-l,\

行级锁定对高并发有很好的适应能力,但需要确保查询是通过索引完成,RgRu;Q0

*Tz7LUr-F0数据更新较为频繁的场景hw!p/j2C Lh:h051Testing软件测试网3}:y_C-iP

数据一致性要求较高;LyA(GC:v1{Blp3c0

&vv8[I_Ne,F6{K

h0硬件设备内存较大,可以利用InnoDB较好的缓存能力来提高内存利用率,尽可能减少磁盘 IOp \m4VR!C6tm051Testing软件测试网9wC(p5ooG:d

3、最佳实践51Testing软件测试网&a{r)u-S6v51Testing软件测试网dd%_8E0D!ed5AD

主键尽可能小,避免给Secondary index带来过大的空间负担!@'Mx5EB

KU(tvw,M(b051Testing软件测试网_G9?|:X4o0|:ox

避免全表扫描,因为会使用表锁%m d9M;|H J.wu@051Testing软件测试网@QwCH z D

尽可能缓存所有的索引和数据,提高响应速度e9p9p9Kxn!P$bw0

*W6a'k1ms6\0m @0在大批量小插入的时候,尽量自己控制事务而不要使用autocommit自动提交51Testing软件测试网[iD#bg51Testing软件测试网a|*zS ~W9[g~

合理设置innodb_flush_log_at_trx_commit参数值,不要过度追求安全性51Testing软件测试网4m_:Ka%Q1RSr!P

BmP'[U,}8k lh0避免主键更新,因为这会带来大量的数据移动/{p^gQd^;B)M051Testing软件测试网5H F5G0G(T

NDBClusterc8tE_g|#T!gE#J2_051Testing软件测试网!GK-K7E0R r5W8?

1、特性51Testing软件测试网S,uT#t8lB)cSI%r:A51Testing软件测试网4Z$U)q7Q4_jQ

分布式:分布式存储引擎,可以由多个NDBCluster存储引擎组成集群分别存放整体数据的一部分-z UC$}/C.oa${!a0

2O]V;RC0支持事务:和Innodb一样,支持事务:hA9jwcT

Uf0

;Hws/}t.lP:h0可与mysqld不在一台主机:可以和mysqld分开存在于独立的主机上,然后通过网络和mysqld通信交互51Testing软件测试网f*lFi/m1X51Testing软件测试网a${X,{#D!H;x8ml

内存需求量巨大:新版本索引以及被索引的数据必须存放在内存中,老版本所有数据和索引必须存在与内存中51Testing软件测试网~JB;|V"x_7I51Testing软件测试网\WgI!Z#l

2、适用场景51Testing软件测试网ND,K$T+l2~{!D\51Testing软件测试网Xm}Ig`)jm/G

具有非常高的并发需求51Testing软件测试网OP}mxM1y@\

t'y[-`R3Y'ek0对单个请求的响应并不是非常的critical51Testing软件测试网FG_t0V$J'v51Testing软件测试网%h^"S9[,H ]c9JKQ

查询简单,过滤条件较为固定,每次请求数据量较少,又不希望自己进行水平Sharding51Testing软件测试网7eL#XXFQ/?51Testing软件测试网,q3Ui9u

Of:p

3、最佳实践51Testing软件测试网:X$Xx3f5~3A R;u

&w$_ghMtpo0尽可能让查询简单,避免数据的跨节点传输HOxn1`$?P0

;_I O3KAB.Qj0尽可能满足SQL节点的计算性能,大一点的集群SQL节点会明显多余Data节点JFb8]AB051Testing软件测试网q-D1?;f

m!h

在各节点之间尽可能使用万兆网络环境互联,以减少数据在网络层传输过程中的延时C:jYeum,B!kD9p051Testing软件测试网F-ZN/^uAig9Z

注:以上三个存储引擎是目前相对主流的存储引擎,还有其他类似如:Memory,Merge,CSV,Archive等存储引擎的使用场景都相对较少,这里就不一一分析了,如果有朋友感兴趣,后面再补充吧。51Testing软件测试网uZ-k5zM4ZV~

mysql数据库存储引擎选择_MySQL数据库性能优化之存储引擎选择相关推荐

  1. mysql查询比对提速_MySQL查询性能优化

    关注我,更多精彩文章第一时间推送给你 1.为什么查询速度会慢? ​首先对一个查询的生命周期简化分析,大致可以按照顺序分为:从客户端.到服务器.然后在服务器进行解析.生成执行计划.执行.并返回结果给客户 ...

  2. mysql 查询设置调优_MySQl 查询性能优化相关

    0. 1.参考 缓存一切数据,读取内存而不是硬盘IO 如果你的服务器默认情况下没有使用MySQL查询缓存,那么你应该开启缓存.开启缓存意味着MySQL 会把所有的语句和语句执行的结果保存下来,如果随后 ...

  3. linux mysql 实战_Linux平台MySQL多实例项目实施_MySQL数据库基础与项目实战06

    Linux平台MySQL多实例项目实施_MySQL数据库基础与项目实战06 视频教程学习地址 Oracle/MySQL数据库学习专用QQ群:336282998.189070296 学完风哥本课程能熟悉 ...

  4. mysql innodb count_MySQL下INNODB引擎的SELECT COUNT(*)性能优化及思考

    正 文: MySQL下INNODB引擎的SELECT COUNT(*)性能优化及思考 最近有项目有高并发需求,服务器采用负载均衡,数据库采用阿里云的RDS MYSQL,16核64G内存,连接数:160 ...

  5. mysql insert 不需要日志_MySQL数据库性能优化(1)「转」

    1.MySQL概述 从本文开始我们将讨论建立在块存储方案之上的关系型数据库的性能优化方案和集群方案.关系型数据库的选型将以创业公司.互联网行业使用最广泛的MySQL数据为目标,但是MySQL的安装过程 ...

  6. mysql部门人员排序设计_MySQL数据库访问性能优化

    MYSQL应该是最流行的WEB后端数据库.大量应用于PHP,Ruby,Python,Java 等Web语言开发项目中,无论NOSQL发展多么快,都不影响大部分架构师选择MYSQL作为数据存储. MYS ...

  7. mysql字符集和表字符集_Mysql数据库表引擎与字符集

    Mysql数据库表引擎与字符集 1.服务器处理客户端请求 其实不论客户端进程和服务器进程是采用哪种方式进行通信,最后实现的效果都是:客户端进程向服务器进程发送一段文本(MySQL语句),服务器进程处理 ...

  8. mysql获取查询策略语句_MySQL数据库查询性能优化策略

    优化查询 使用Explain语句分析查询语句 Explain 用来分析 SELECT 查询语句,开发人员可以通过分析 Explain 结果来优化查询语句. 通过对查询语句的分析,可以了解查询语句的执行 ...

  9. mysql数据库根据引擎备份_MySQL数据库备份的几种方式

    最近一直想写点博客,但是不知道写什么,感觉自己最近的知识没有什么增加,今天想到了一篇可以写的博客.以前试过根据data文件夹备份MySQL,但是从来没有成功过,前几天帮助朋友还原MySQL,终于成功的 ...

最新文章

  1. c语言 python-C语言和python的区别
  2. android ProgressBar 使用方法
  3. 济宁市机器人科技乐园_人工智能的“游乐场”,邀你免费畅玩!
  4. 数据结构实验之排序五:归并求逆序数
  5. Navicat连接mysql8.0.1版本出现1251--Client
  6. 免费SSL申请:(各大服务商资源综合)- 免费获取
  7. 编码程序教程_如何从编码教程到构建自己的项目
  8. 以post方式携窗体等参数向服务器发送请求 发出去的字节流 返回的内容
  9. ResultSet的getDate()、getTime()和getTimestamp()比较
  10. mysql导入库排除某个表_mysql导入数据排除表-mysql导入数据排除某张表或多张表-吾爱编程网...
  11. python中factor函数_Python基础教程
  12. 死锁避免算法--银行家算法
  13. MOSS 2010:Visual Studio 2010开发体验(32)——工作流开发最佳实践(四):可重用工作流...
  14. 显著性测试(Friedman test, Post-hoc Nimenyi test以及可视化)
  15. 打印表格留标题怎么设置_WPS怎么设置打印表格每页都有标题?
  16. 教你怎样用安全网关消灭蠕虫病毒(转)
  17. CSAPP实验1:Data Lab笔记
  18. Android Wifi --自动连接指定SSID(各种加密方式均可)
  19. Error: This old version of 'S8051.DLL' is incompatibl 解决办法
  20. 如何对台式计算机 笔记本进行日常维护,笔记本电脑日常怎么保养?这些方法别错过了...

热门文章

  1. boost::process::pipe相关的测试程序
  2. boost::mp11::mp_set_push_front相关用法的测试程序
  3. boost::mp11::mp_pop_front相关用法的测试程序
  4. boost::math模块使用barycentric有理插值的测试程序
  5. boost::hana::metafunction用法的测试程序
  6. boost::foreach模块右值const的测试程序
  7. boost::gregorian模块实现测试当天的程序
  8. GDCM:gdcm::FileChangeTransferSyntax的测试程序
  9. boost::pointer_traits用法实例
  10. VTK:Utilities之WindowModifiedEvent