mysql怎么处理一秒10万并发?
mysql的高并发有:优化SQL语句、优化数据库字段、添加缓存、分区表、读写分离、垂直拆分、解耦模块、水平拆分等。
高并发的瓶颈大多在后台。存储mysql的常规优化方案如下:
(1)代码中的sql语句优化
(2)数据库字段优化和索引优化
(3)添加缓存、redis/memcache等。
(4)主从式,读写分离
(5)分区表
(6)垂直分离和解耦模块
(7)水平分割
方案分析:
1.方法1方法2是最简单快捷的提高效率的方法。因为每条语句都命中索引,所以效率最高。但是,如果构建索引是为了优化sql,那么索引将被淹没。对于1000万级以上的表,维护索引的成本会大大增加,增加数据库的内存开销。
2.数据库字段的优化。有一次发现一个高级程序员s设计一个表字段,一个日期类型,被设计成varchar类型,不规范,同时无法检查写入的数据,索引的效率也不一样。
3.缓存适用于读写更新频率相对较低的业务场景,否则缓存异议不大,命中率低。总的来说,缓存主要是为了提高接口处理速度,减少并发带来的db压力以及由此带来的其他问题。
4.分区不是表,但结果仍然是表,只是存储的数据文件被分成了几个小块。在表数据非常大的情况下,可以解决无法一次性加载到内存中,维护大表数据的问题。
5.垂直拆分将一个表按列拆分成多个表,常见的是将主表的扩展数据和文本数据分开,减轻磁盘io的压力。
6.水平分割。水平拆分的主要目的是提高单个表的并发读写能力(压力分散到各个子表)和磁盘的IO性能(一个非常大的。MYD文件在。每个子表的MYD文件)。如果没有一千万级别以上的数据,为什么要拆分?也可以只优化一个表。如果没有太多并发,分区表一般都能满足。所以一般来说,横劈是最后的选择,在设计上还是需要循序渐进。
如何强制mysql使用某一个index?
根据mysql文档,第一个是多列索引,可用于指定已知范围内的user_id或user_id和blog_id的值的查询。
第二个是定义两个单列索引。如果单列和多列索引同时存在,mysql优化器会通过决定哪个索引找到的行数更少并使用它来获取行,来尝试找到一个更具限制性的索引。以上来自我个人对mysql帮助文档的理解,欢迎Daniel■批评指正。