一文彻底弄懂MySQL的优化

2 02 3 年,当时我的朋友正在做一个项目 MySQL 非常慢 他长时间阅读信息
1 查询优化: 找到上周的测验 其中年份(日)=2 02 3 这行代码索引无效 替换为 “2 02 3 -01 -01 ”和“2 02 3 -1 2 -3 1 ”之间的日期在哪里 实时速度提高 5 0%
不要盲目建立单列索引 我以前也犯过错误 用户表用户名是高频字段 只需添加一个索引即可 结果插入数据时卡住了。
结果发现一个表有超过5 个索引 写操作变得更慢
2 指标设计: 选择 INT AUTO_INCRMENT 作为主键 不要使用 UUID 我试过一次 B+植物层数直接爆至4 层
超香覆盖指数 从用户中选择 id、名称 WHERE name='Alice' 创建关联索引(名称,id) 查询直接从索引获取数据 无需回答 我使用了 3 个项目来实现这个技巧
3 表结构: 谨慎使用字段类型 以前使用过的 CHAR(2 0) 现在将其更改为 VARCHAR 节省了近2 G的存储空间
我也陷入了横向侧板的陷阱 按用户ID划分表格时 不考虑跨表查询 导致相关查询变慢 最后,
4 添加了缓存解决方案。
交易: 读取提交(RC)就足够了 我尝试一遍又一遍地阅读它 缓存渗透问题有点烦人 按键优化也很重要 选择...更新 整个表被锁定一次 差点崩溃
5 配置: innodb_buffer_pool_size 我设置的是1 6 G 服务器内存3 2 G 该参数需要调整 调整不当意味着无用功
innodb_log_file_size 我改成1 G了 文本量大的情况 直连3 G
6 .监控: EXPLANATION查看访问模式 我有一个查询类型 ALL 更改了 JOIN 条件 直接更改索引 这些细节需要注意
必须开启慢查询日志 我每天都会看 总结 mysqldumpslow 前 5 名优化 系统速度提高 3 0%
这就是总结 分层优化是关键 过渡很重要 OLTP和OLAP之间有很大的区别 由你决定 算了

mysql 分区 与分表 区别

我曾经在一个电商平台上看到过一款最畅销的电子产品,销量超过1 0万台。
那天,我正好负责数据库优化。
当我看到这个数据时,我震惊了。
如果这个销售表不拆分成多个表,那么查询需要多长时间?正当我思考这个问题的时候,我突然想到:这不就是拆分时钟的一个优点吗?对表进行分区实际上意味着将一个大表拆分为多个较小的表,从而使查询速度更快。

记得有一次一位同事来找我说数据库表太大,查询很慢。
我向他解释了子表的概念和好处。
听完故事后,他连连点头,说道:“哦,明白了!那我们得赶紧分桌子了。

分桌子就像把一个巨大的图书馆分成了几个小图书馆。
搜索自然要快得多,因为每个小型图书馆只存放有限数量的书籍。
然而,表的划分有特定的限制,并且不能轻易地划分它们。
例如,您可能希望根据您的业务需求根据时间、区域、类别等对表进行分区。
这可以让您在查询数据时更快地找到目标表。

我们来谈谈分区。
分区就像将图书馆划分为楼层,并在每层存放不同类型的书籍。
这样读者就可以根据自己的需要快速找到对应的楼层。
MySQL分区就是将数据按照一定的规则分布到不同的分区中。

记得有一次朋友问我,“表分区和分区有什么区别?”我给他举了一个例子。
“表分区就像把一本书分成几页,每页只写入部分内容。
分区就像把一本书按照内容分成几个部分,并将每个部分放在一个单独的文件夹中。

表分区和分区都是优化数据库性能的方法。
表分区侧重于提高查询速度,分区侧重于提高磁盘I/O性能。
在实际应用中,您可以根据自己的具体情况选择合适的方法,也可以两者结合使用。

现在,您更喜欢表还是分区?

mysql,sqlserver数据库单表数据过大的处理方式

MySQL和SQLServer数据库单表数据过大如何处理:
1 . 表分区:提高查询性能,优化数据管理,增强系统可扩展性。
MySQL有RANGE、LIST、HASH和KEY分区,SQLServer有RANGE和HASH分区。
2 、分表:减少单表数据量,提高并发处理能力。
分表策略包括时间和业务逻辑。
3 、分库:提高系统扩展性,降低单点故障风险。
分片策略包括业务模块和区域。
4 、案例:GPS应用使用SQL Server,使用表分区,按天分区,每天删除3 0天前的数据,然后升级到MongoDB。

根据业务需求、系统架构和数据访问模式选择合适的方法。
不断优化和调整设计方案,确保系统稳定性和性能。

数据库分区是什么?数据库分区的类型、优势及实现指南

记得上次加班到很晚,数据库突然死机了,管理员满头大汗。
经过长时间的研究,我发现某些大型表上的缓慢查询会对整个系统产生负面影响。
第二天我意识到,如果我早点使用分区,也许就能早点解决这个问题。

分区简单来说就是拆掉一座房子换一个大钟。
例如,电商平台上的订单表最常见的是按年份划分。
2 02 0 年订单放置在一个分区中,2 02 1 年订单放置在另一分区中。
查询任意年份的数据时,不需要遍历整个表,只需要遍历相应的分区即可。

最简单的是范围分区。
例如,PARTITION BY RANGE(YEAR(order_date)) by date的这种用法比烹饪更容易,但它也有很多陷阱。
我见过人们将分区范围设置得太紧。
因此,在任何一年中都会有大量数据,全部打包到一个分区中,并且查询会比没有分区时慢。

拆分列表更容易,只需几行代码即可完成。
例如,PARTITION BY LIST(country_code) 按国家/地区进行分区,但如果国家/地区代码频繁更改(例如有一天突然出现一个新国家/地区),分区就没有什么用处。

哈希分区是最平衡的,数据分布均匀,但查询需要跨分区搜索,效率不高。
我尝试使用用户 ID 对分区进行哈希处理。
但是,如果要检查特定用户在特定日期的所有订单,则数据库必须在所有分区上运行。
最后我发现用户ID都是奇数,最好不要全部放在一个分区中。

复杂的隔断给人一种奢华的感觉,但实际上就像堆放炒菜一样。
你把油、盐、酱、醋都加进去了,但最后可能一点味道都没有。
但是,如果您的场景很复杂,例如时间和用户类型,那么复合分区非常适合。

维护隔断就像侍奉祖先。
每年都要检查分区大小,该销毁的销毁,该关闭的关闭。
有一次,我的老板差点解雇我,因为我半夜添加了一个新分区,第二天发现我的数据乱了。

毕竟隔断和分桌的区别就像盘子和馒头一样。
分区在逻辑上仍然是单个表,但在物理上被划分。
对表进行分区简单来说就是 2 这意味着切割两块板。
我见过人们为了分区表而搞乱数据库。
因此,应用层需要改变很多逻辑。
最后,还是不要分手为好。

等一下,我昨天发现了一个新东西,叫做“分区表”。
说是分区和子表结合起来,但是听起来很复杂。
谁会使用这样的东西?