MySql遇到的一些问题<br />王同超<br />zbwangchao@163.om<br />
提纲<br />性能—慢查询<br />一些原则<br />索引结构<br />Myisam innodb引擎<br />几个技巧、和认识<br />
性能相关<br />程序<br />数据库本身配置(很多比较复杂)<br />前端页面(页面请求 css js):<br />工具 :<br /><ul><li>YSlow
Page Speed
Mysqldumpslow
mysqlsla</li></li></ul><li>Count(*)  count(1) count(userid) 的认识误区<br />意义不同<br />Count(*) = count(0) 表的行总数,也不存在count(1)比co...
Myisaminnodb<br />Myisam ≈ sqlserver堆表<br />史上最快(select insert 性能超好)(update delete 超烂),update 、delete:lock、更新索引<br />表锁<br...
B-tree<br />B-Tree 特性<br />关键字集合分布在整颗树中; <br />任何一个关键字出现且只出现在一个结点中; <br />搜索有可能在非叶子结点结束; <br />其搜索性能等价于在关键字全集内做一次二分查找; <br...
B+tree<br />B+树是B-树的变体,也是一种多路搜索树:<br />1.其定义基本与B-树同,除了:<br />2.非叶子结点的子树指针与关键字个数相同;<br />3.非叶子结点的子树指针P[i],指向关键字值属于[K[i], K[...
总结<br /> B-树:多路搜索树,每个结点存储M/2到M个关键字,非叶子结点存储指向关键字范围的子结点;所有关键字在整颗树中出现,且只出现一次,非叶子结点可以命中;<br /> B+树:在B-树基础上,为叶子结点增加链表指针,所有关键字都在...
Myisam 存储结构<br />Myisam的并发插入:concurrent_insert=[0,1,2]<br />
Myisam<br />高速select insert<br />myisam 生来就是为了插入和查询设计的,天生的log工具<br />
Myisam 索引结构<br />能得到的东西:<br />Myisam的索引是无差别的<br />尽可能的使用覆盖索引,避免磁盘io<br />
Innodb	数据结构<br />数据按主键存放,构成一个b-tree<br />主键使用自增int等,避免guid(节点分裂、合并)<br />
Innodb 表文件<br />每次io都会整页返回数据,再内存处理=>row越小越好=>大字段切分独立表=><br />现在的很多应用都放在nosql(豆瓣)<br />
聚集索引<br />
非聚集索引<br />
Innodb	<br />安全(innodb double write,redo log, undo log)<br />高可用<br />高并发(<=行锁 mvcc)<br />=>update<br />
B-tree B+tree<br />树的深度和广度是由数据量决定<br />(log N)/log B to (log N)/log 2B ~~LogB N<br />Btree  自动控制树的深度:2-3<br />结论:<br />分表不...
Delete update insert的性能问题到底在哪里<br />聚集索引树的重新组织<br />很严重的问题,所以聚集索引一定不能guid不确定数据类型,这也可能是为什么sqlserver的自增列永远不能修改的问题,引起数据页数据迁移问...
No update<br />hbase<br />{  "aaaaa" : {<br />    "A" : {<br />       "foo" : {<br />        15 : "y",<br />        4 : "m...
性能优化的方向<br />需求和架构及业务实现优化:55%<br />Query 语句的优化:30%<br />数据库自身的优化:15%<br />业务和数据库各占一半<br />
别人解决问题的一般步骤<br />Memcached+MySQL<br />M-S(Mysql主从读写分离)<br />分表分库(程序复杂度高很多)高并发MySQL应用开始使用InnoDB引擎代替MyISAM<br />Nosql(高读写、fr...
推荐的优化顺序<br />google page speed 和yslow 分析页面<br />地毯式sql优化,按照每个页面优化<br />设计最初不需要严格设计索引等,快速的实现业务为主<br />生产环境下监控和优化,持续优化<br />
分表 分区<br />影响性能的几个点<br />索引的深度(2-3)产生的io次数<br />分区分表不当,产生更多的io<br />索引的大小,innodb的页大小,16k,索引越小,速度越快(io扫描扇区少)<br />数据行数的影响很小...
分表解决了什么问题?<br />
书上说<br />
Mysql 配置G点<br />query_cache_size<br />table_cache<br />thread_cache_size<br />tmp_table_size<=(Created_tmp_disk_tables / C...
硬盘的几个数据<br />10000rpm<br />15000rpm<br />缩短硬盘的平均寻道时间和实际读写时间<br />目前Fast ATA接口硬盘的最大外部传输率为16.6MB/s,而Ultra ATA接口的硬盘则达到33.3MB/...
Iops<br />IOPS值一般从几十到几百(大多在100-200区间)<br />IOPS值现在主要作为SSD固态盘的一个重要参数指标,一般一个普通的SSD,都很容易达到几千,专业些的产品可以达到几万!<br />
硬盘的几个概念<br />目前硬盘的平均寻道时间通常在8ms到12ms之间,而SCSI硬盘则应小于或等于8ms。<br />平均访问时间=平均寻道时间+平均等待时间。 <br />目前硬盘的平均寻道时间通常在8ms到12ms之间,而SCSI硬盘...
传输速率<br />传输速率(Data Transfer Rate) 硬盘的数据传输率是指硬盘读写数据的速度,单位为兆字节每秒(MB/s)。<br />硬盘数据传输率又包括内部数据传输率和外部数据传输率。 <br />内部传输率(Interna...
硬盘的性能<br />转速<br />平均寻道时间<br />目前硬盘的平均寻道时间通常在 9ms到11ms之间,如迈拓的钻石7代系列平均寻道时间为9ms。<br />数据传输速率(内部,外部),我们测试的一般是外部,带buffer,<br /...
硬盘&内存<br />顺序访问内存数据也比随机访问快,内存250000 行100字节数据,内存比磁盘快2500倍,内存的顺序访问只比随机快10倍。<br />=>加内存,增加随机io性能=》缓存命中率高<br />
mysql执行查询的一般性过程<br />1.客户端发送查询到服务器<br />2.服务器检查查询缓存 (HASH SQL)<br />=>所以书写的sql语句大小写要尽量统一<br />3.服务器解析,预处理和优化查询,生成执行计划。<br ...
查询缓存<br />Myisam将sql的查询结果缓存在内存<br />Hash sql语句<br />1.缓存未命中原因<br />查询不可缓存 : 不确定函数。current_date(),now(),结果太大, Qcache_not_ca...
技巧一:数据分页<br />一、特殊场合下<br />如果每页有20条结果,那么应该查询limit 21行数据,只显示20条,如果结果中有21行,那么就会有下一页。<br />二、比较通用<br />1.大数量分页<br />SELECT * ...
技巧二,简单优化<br />避免子查询(临时表不支持索引)<br />所以要让子查询创建的临时表尽可能的小。<br />可以利用MYISAM对COUNT(*)的优化对已经有索引的一小部分做统计。<br />SELECT COUNT(*) FRO...
启立说过一句<br />很实在的话“把每个请求弄的都快了比什么都好”<br />公务员最大的活跃用户100W<br />nosql的不可靠要考虑清楚,<br />长处一定是要结合分布式才优秀,<br />实现成本越低,肯定问题越多<br />
技巧三:数据维护<br />不要对一个大表进行delete update操作<br />在新表中替代<br />RENAME TABLE my_summary TO my_summary_old, my_summary_new TO my_su...
Insert delayed<br />用户‘DELAYED‘<br />立即返回,放入缓冲当中,无法使用LAST_ISNERT_ID()<br />不是万金油,可配置、有限的insert队列<br />
优化数据访问的原则<br />查询性能低下的最基本原因就是访问了太多数据。一些查询不可避免的要筛选大量的数据,但这并不常见。大部分性能欠佳的查询都可以用减少数据访问的方式进行修改。<br />分析性能欠佳的查询,两个步骤:<br />1.应用程...
原则实例<br />对于访问的数据行很大,而生成的结果中数据行很少<br />1.使用覆盖索引,它存储了数据,所以存储引擎不会去扫描完整的行。<br />2.更改架构,一个例子就是使用汇总表。<br />3.重写复杂的查询,让mysql的优化器...
公务员优化的一些手段<br />硬件加内存<br />提高缓存命中率(30->40),减少io<br />业务优化,减少请求,去掉不必要的sql语句<br />(键富,本地缓存)<br />慢查询优化:很多具体的例子不列举<br />
分享两个ppt<br />百姓网<br />51job<br />
表切分的一个实例<br />大字段切分(text)<br />小索引文件<br />实例<br />1: edu的 ol_question(100W >3G)<br />很典型的一个设计问题<br />
Buffer 策略<br />定时 ,过期前更新,<br />阀值75%,提前更新数据<br />
别人说的索引经验数据<br /><ul><li>5个(3*5),非官方,经验值,不完全的
扩展索引,非增加=>更多的覆盖索引
Upcoming SlideShare
Loading in …5
×

Mysql遇到的一些问题

1,268 views

Published on

mysql基础方面的分享 很基础很基础

Published in: Technology, Business
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,268
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
31
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Mysql遇到的一些问题

  1. 1. MySql遇到的一些问题<br />王同超<br />zbwangchao@163.om<br />
  2. 2. 提纲<br />性能—慢查询<br />一些原则<br />索引结构<br />Myisam innodb引擎<br />几个技巧、和认识<br />
  3. 3. 性能相关<br />程序<br />数据库本身配置(很多比较复杂)<br />前端页面(页面请求 css js):<br />工具 :<br /><ul><li>YSlow
  4. 4. Page Speed
  5. 5. Mysqldumpslow
  6. 6. mysqlsla</li></li></ul><li>Count(*) count(1) count(userid) 的认识误区<br />意义不同<br />Count(*) = count(0) 表的行总数,也不存在count(1)比count(*)性能更好的说法<br />Count(userid): userid 非NULL字段总数<br />本页备注有测试用例<br />
  7. 7. Myisaminnodb<br />Myisam ≈ sqlserver堆表<br />史上最快(select insert 性能超好)(update delete 超烂),update 、delete:lock、更新索引<br />表锁<br />B-tree (depth:2-3)<br />Page size 1K,很少关注这个数据<br />只缓存索引=>(尽可能的使用覆盖索引)<br />Innodb<br />B+tree索引(自动hash)<br />Page size:16K(很重要)<br />事物<br />行锁(mvcc多版本并发控制)<br />高并发<br />缓存数据+索引<br />
  8. 8. B-tree<br />B-Tree 特性<br />关键字集合分布在整颗树中; <br />任何一个关键字出现且只出现在一个结点中; <br />搜索有可能在非叶子结点结束; <br />其搜索性能等价于在关键字全集内做一次二分查找; <br />自动层次控制; <br />B-树<br />是一种多路搜索树(并不是二叉的):<br />1.定义任意非叶子结点最多只有M个儿子;且M>2;<br />2.根结点的儿子数为[2, M];<br />3.除根结点以外的非叶子结点的儿子数为[M/2, M];<br />4.每个结点存放至少M/2-1(取上整)和至多M-1个关键字;(至少2个关键字)<br />5.非叶子结点的关键字个数=指向儿子的指针个数-1;<br />6.非叶子结点的关键字:K[1], K[2], …, K[M-1];且K[i] < K[i+1];<br />7.非叶子结点的指针:P[1], P[2], …, P[M];其中P[1]指向关键字小于K[1]的子树,P[M]指向关键字大于K[M-1]的子树,其它P[i]指向关键字属于(K[i-1], K[i])的子树;<br />8.所有叶子结点位于同一层;<br />
  9. 9. B+tree<br />B+树是B-树的变体,也是一种多路搜索树:<br />1.其定义基本与B-树同,除了:<br />2.非叶子结点的子树指针与关键字个数相同;<br />3.非叶子结点的子树指针P[i],指向关键字值属于[K[i], K[i+1])的子树(B-树是开区间);<br />4.为所有叶子结点增加一个链指针;(范围查询)<br />5.所有关键字都在叶子结点出现;<br />B+的特性:<br />1.所有关键字都出现在叶子结点的链表中(稠密索引),且链表中的关键字恰好是有序的;<br />2.不可能在非叶子结点命中;<br />3.非叶子结点相当于是叶子结点的索引(稀疏索引),叶子结点相当于是存储(关键字)数据的数据层;<br />4.更适合文件索引系统;<br />
  10. 10. 总结<br /> B-树:多路搜索树,每个结点存储M/2到M个关键字,非叶子结点存储指向关键字范围的子结点;所有关键字在整颗树中出现,且只出现一次,非叶子结点可以命中;<br /> B+树:在B-树基础上,为叶子结点增加链表指针,所有关键字都在叶子结点中出现,非叶子结点作为叶子结点的索引;B+树总是到叶子结点才命中;<br />=>保证节点的利用率<br />
  11. 11. Myisam 存储结构<br />Myisam的并发插入:concurrent_insert=[0,1,2]<br />
  12. 12. Myisam<br />高速select insert<br />myisam 生来就是为了插入和查询设计的,天生的log工具<br />
  13. 13. Myisam 索引结构<br />能得到的东西:<br />Myisam的索引是无差别的<br />尽可能的使用覆盖索引,避免磁盘io<br />
  14. 14. Innodb 数据结构<br />数据按主键存放,构成一个b-tree<br />主键使用自增int等,避免guid(节点分裂、合并)<br />
  15. 15. Innodb 表文件<br />每次io都会整页返回数据,再内存处理=>row越小越好=>大字段切分独立表=><br />现在的很多应用都放在nosql(豆瓣)<br />
  16. 16. 聚集索引<br />
  17. 17. 非聚集索引<br />
  18. 18. Innodb <br />安全(innodb double write,redo log, undo log)<br />高可用<br />高并发(<=行锁 mvcc)<br />=>update<br />
  19. 19. B-tree B+tree<br />树的深度和广度是由数据量决定<br />(log N)/log B to (log N)/log 2B ~~LogB N<br />Btree 自动控制树的深度:2-3<br />结论:<br />分表不解决查询的性能问题<br />百万、千万、亿、数据量的表查询性能相当<br />不恰当的分区分表会造成很大的性能问题(多次io):单表(2-3),多表((2-3)*n)<br />
  20. 20. Delete update insert的性能问题到底在哪里<br />聚集索引树的重新组织<br />很严重的问题,所以聚集索引一定不能guid不确定数据类型,这也可能是为什么sqlserver的自增列永远不能修改的问题,引起数据页数据迁移问题很严重<br />Guid数据引起大量数据页‘迁移’(btree节点分裂、合并)<br />引起索引树(btree)节点的合并、分裂<br />通常并不是所有的操作会马上引起合并和分裂,索引缓存和节点的左旋和右旋(b+tree)<br />也未必会马上引起io操作<br />
  21. 21. No update<br />hbase<br />{ "aaaaa" : {<br /> "A" : {<br /> "foo" : {<br /> 15 : "y",<br /> 4 : "m"<br /> },<br /> "bar" : {<br /> 15 : "d", } },<br /> "B" : {<br /> "" : {<br /> 6 : "w"<br /> 3 : "o"<br /> 1 : "w"} } }}<br />SELECT * FROM ol_answerresult_tongchao WHERE userid = 520006 AND questionid = '714168c0-80bb-4377-930d-b6acbecaee08’ ORDER BY time_version DESC LIMIT 1<br />SELECT * FROM ol_answerresult_tongchao WHERE userid = 520006 AND questionid = '714168c0-80bb-4377-930d-b6acbecaee08’ ORDER BY AnswerResultId DESC LIMIT 1<br />可能的应用:日志,作答记录,<br />版本信息:自增id,timestamp<br />
  22. 22. 性能优化的方向<br />需求和架构及业务实现优化:55%<br />Query 语句的优化:30%<br />数据库自身的优化:15%<br />业务和数据库各占一半<br />
  23. 23. 别人解决问题的一般步骤<br />Memcached+MySQL<br />M-S(Mysql主从读写分离)<br />分表分库(程序复杂度高很多)高并发MySQL应用开始使用InnoDB引擎代替MyISAM<br />Nosql(高读写、free schema )<br />
  24. 24. 推荐的优化顺序<br />google page speed 和yslow 分析页面<br />地毯式sql优化,按照每个页面优化<br />设计最初不需要严格设计索引等,快速的实现业务为主<br />生产环境下监控和优化,持续优化<br />
  25. 25. 分表 分区<br />影响性能的几个点<br />索引的深度(2-3)产生的io次数<br />分区分表不当,产生更多的io<br />索引的大小,innodb的页大小,16k,索引越小,速度越快(io扫描扇区少)<br />数据行数的影响很小1亿 500万,都能保证深度3<br />Iometer<br />每个扇区可以存放512个字节<br />
  26. 26. 分表解决了什么问题?<br />
  27. 27. 书上说<br />
  28. 28. Mysql 配置G点<br />query_cache_size<br />table_cache<br />thread_cache_size<br />tmp_table_size<=(Created_tmp_disk_tables / Created_tmp_table)<br />open_files_limit<=(Open_files / open_files_limit * 100% <= 75%)<br />2.myisam的G点<br />query_cache<br />key_buffer_size<br />3. innodb 的G点<br />innodb_buffer_pool_size<br />innodb_flush_log_at_trx_commit<br />innodb_log_buffer_size<br />innodb_log_file_size<br />innodb_flush_method<br />
  29. 29. 硬盘的几个数据<br />10000rpm<br />15000rpm<br />缩短硬盘的平均寻道时间和实际读写时间<br />目前Fast ATA接口硬盘的最大外部传输率为16.6MB/s,而Ultra ATA接口的硬盘则达到33.3MB/s。<br />
  30. 30. Iops<br />IOPS值一般从几十到几百(大多在100-200区间)<br />IOPS值现在主要作为SSD固态盘的一个重要参数指标,一般一个普通的SSD,都很容易达到几千,专业些的产品可以达到几万!<br />
  31. 31. 硬盘的几个概念<br />目前硬盘的平均寻道时间通常在8ms到12ms之间,而SCSI硬盘则应小于或等于8ms。<br />平均访问时间=平均寻道时间+平均等待时间。 <br />目前硬盘的平均寻道时间通常在8ms到12ms之间,而SCSI硬盘则应小于或等于8ms。 硬盘的等待时间,又叫潜伏期(Latency),是指磁头已处于要访问的磁道,等待所要访问的扇区旋转至磁头下方的时间。平均等待时间为盘片旋转一周所需的时间的一半,一般应在4ms以下。<br />
  32. 32. 传输速率<br />传输速率(Data Transfer Rate) 硬盘的数据传输率是指硬盘读写数据的速度,单位为兆字节每秒(MB/s)。<br />硬盘数据传输率又包括内部数据传输率和外部数据传输率。 <br />内部传输率(Internal Transfer Rate) 也称为持续传输率(Sustained Transfer Rate),它反映了硬盘缓冲区未用时的性能。内部传输率主要依赖于硬盘的旋转速度。 <br />外部传输率(External Transfer Rate)也称为突发数据传输率(Burst Data Transfer Rate)或接口传输率,它标称的是系统总线与硬盘缓冲区之间的数据传输率,外部数据传输率与硬盘接口类型和硬盘缓存的大小有关。 <br />目前Fast ATA接口硬盘的最大外部传输率为16.6MB/s,而Ultra ATA接口的硬盘则达到33.3MB/s。<br />
  33. 33. 硬盘的性能<br />转速<br />平均寻道时间<br />目前硬盘的平均寻道时间通常在 9ms到11ms之间,如迈拓的钻石7代系列平均寻道时间为9ms。<br />数据传输速率(内部,外部),我们测试的一般是外部,带buffer,<br />目前大多数家用硬盘的内部传输率在60MB/s~90MB/s,内部数据传输率才是系统真正的瓶颈(“最大内部数据传输率”比“最大外部传输速率”要小很多,所以不要迷恋“最大外部传输速率”,它只是个传说),<br />
  34. 34. 硬盘&内存<br />顺序访问内存数据也比随机访问快,内存250000 行100字节数据,内存比磁盘快2500倍,内存的顺序访问只比随机快10倍。<br />=>加内存,增加随机io性能=》缓存命中率高<br />
  35. 35. mysql执行查询的一般性过程<br />1.客户端发送查询到服务器<br />2.服务器检查查询缓存 (HASH SQL)<br />=>所以书写的sql语句大小写要尽量统一<br />3.服务器解析,预处理和优化查询,生成执行计划。<br />4.执行引擎调用存储引擎API执行查询。<br />5.服务器将结果发送到客户端。<br />
  36. 36. 查询缓存<br />Myisam将sql的查询结果缓存在内存<br />Hash sql语句<br />1.缓存未命中原因<br />查询不可缓存 : 不确定函数。current_date(),now(),结果太大, Qcache_not_cached会记录两种无法缓存的查询数量。<br /> 服务器以前从来没见过这个缓存。<br /> 查询结果被缓存过,但是服务器把它移除。<br /> 很多缓存失效。<br />2.很多缓存未命中,但是不能缓存的查询很少。<br /> 查询缓存未被激活。<br />服务器看到了以前未见过的查询<br /> 缓存失效。<br />
  37. 37. 技巧一:数据分页<br />一、特殊场合下<br />如果每页有20条结果,那么应该查询limit 21行数据,只显示20条,如果结果中有21行,那么就会有下一页。<br />二、比较通用<br />1.大数量分页<br />SELECT * FROM ol_answerlog ORDER BY AnswerLogId LIMIT 1000000,10<br />SELECT * FROM ol_answerlog g INNER JOIN(<br />SELECT AnswerLogId FROM ol_answerlog ORDER BY AnswerLogId LIMIT 1000000,10<br />) AS tt USING(AnswerLogId)<br />2.别人的建议:only 1000条<br />
  38. 38. 技巧二,简单优化<br />避免子查询(临时表不支持索引)<br />所以要让子查询创建的临时表尽可能的小。<br />可以利用MYISAM对COUNT(*)的优化对已经有索引的一小部分做统计。<br />SELECT COUNT(*) FROM WORD.CITY WHERE ID>5;<br />优化为下面的语句<br />SELECT (SELECT COUNT(*) FROM CITY) - COUNT(*) FROM CITY WHEREID<=5;<br />这样的explain只扫描6行数据<br />1.确保on 或using使用的列上有索引。<br />通常只需要在联接中的第2个表上添加索引就可以。<br />2.确保group by或order by只引用一个表中的列。这样可以使用索引。<br />1.把一个复杂的查询分解为多个简单的查询。(mysql一般的服务器,每秒钟可以处理50 000个查询)<br />
  39. 39. 启立说过一句<br />很实在的话“把每个请求弄的都快了比什么都好”<br />公务员最大的活跃用户100W<br />nosql的不可靠要考虑清楚,<br />长处一定是要结合分布式才优秀,<br />实现成本越低,肯定问题越多<br />
  40. 40. 技巧三:数据维护<br />不要对一个大表进行delete update操作<br />在新表中替代<br />RENAME TABLE my_summary TO my_summary_old, my_summary_new TO my_summary;<br />放在一个事物中,避免脏数据。<br />
  41. 41. Insert delayed<br />用户‘DELAYED‘<br />立即返回,放入缓冲当中,无法使用LAST_ISNERT_ID()<br />不是万金油,可配置、有限的insert队列<br />
  42. 42. 优化数据访问的原则<br />查询性能低下的最基本原因就是访问了太多数据。一些查询不可避免的要筛选大量的数据,但这并不常见。大部分性能欠佳的查询都可以用减少数据访问的方式进行修改。<br />分析性能欠佳的查询,两个步骤:<br />1.应用程序是否在获取超过需要的数据。这通常是访问了过多的行或列。<br />2.mysql服务器是否分析了超过需要的行<br />Userinfouserinfo = UserBO.GetUserList().First();<br />。。。其他优化手段<br />
  43. 43. 原则实例<br />对于访问的数据行很大,而生成的结果中数据行很少<br />1.使用覆盖索引,它存储了数据,所以存储引擎不会去扫描完整的行。<br />2.更改架构,一个例子就是使用汇总表。<br />3.重写复杂的查询,让mysql的优化器可以优化的执行。<br />
  44. 44. 公务员优化的一些手段<br />硬件加内存<br />提高缓存命中率(30->40),减少io<br />业务优化,减少请求,去掉不必要的sql语句<br />(键富,本地缓存)<br />慢查询优化:很多具体的例子不列举<br />
  45. 45. 分享两个ppt<br />百姓网<br />51job<br />
  46. 46. 表切分的一个实例<br />大字段切分(text)<br />小索引文件<br />实例<br />1: edu的 ol_question(100W >3G)<br />很典型的一个设计问题<br />
  47. 47. Buffer 策略<br />定时 ,过期前更新,<br />阀值75%,提前更新数据<br />
  48. 48. 别人说的索引经验数据<br /><ul><li>5个(3*5),非官方,经验值,不完全的
  49. 49. 扩展索引,非增加=>更多的覆盖索引
  50. 50. 尽量使用覆盖索引(不用扫描磁盘取数据)
  51. 51. 满足业务的基础上,越少越好(update 性能)
  52. 52. 查询性能取决与深度,非rows,基本都在2-3
  53. 53. 减少count()
  54. 54. 如何分表(业务隔离性好的字段)hash range index map</li></li></ul><li>基准测试工具<br />Sysbench<br />Mysqlsla<br />Benchmark<br />Lr<br />http_load<br />
  55. 55. 项目的现在&将来(DB方面)<br /><ul><li>目前的使用经验基本能支撑相当一段时间访问
  56. 56. 需要解决的问题</li></ul>高可用HA<br />M-M:hearbmeat mmm 高端存储<br />M-S:LVS DNS <br />热备份<br />监控<br />网络成本,有必要的时候项目内网网络升级千兆<br />
  57. 57. END<br />

×