首页 > 数据库 >我与数据库的七年之痒:从初识到没它不行

我与数据库的七年之痒:从初识到没它不行

时间:2024-08-16 09:48:48浏览次数:12  
标签:七年之痒 数据库 MySQL id 初识 SQL 查询 order

腾讯云社区最新发布的《中国数据库前世今生》纪录片,作为7年使用数据库的程序员来说,感受很深。纪录片主要讲述了数据库的发展历程以及不同数据库的使用经验。视频中提到作者在大学时期学习数据库原理时的经历,以及关于使用TDSQL时与MySQL不兼容的问题。此外,视频还涉及了如何选择合适的shardkey以及分享了一些数据库学习经验和心得。

image

看完纪录片之后,有感而发,算一算使用数据也有7年了,文章字数较多,有兴趣的朋友可以听我娓娓道来。

一、初识的新鲜感:邂逅SQL Server

2017年,在那一年,学校刚好开始开设《数据库系统概论》这门课程。这门课程为我揭开了数据库的神秘面纱,让我对数据库产生了浓厚的兴趣,《数据库系统概论》这门课程为我打下了扎实的数据库理论基础,使我具备了较强的数据库设计、管理和优化能力。在今后的学习和工作中,这些知识和技能将对我产生深远的影响。作为编程小白,那时一直很好奇数据库是干嘛用的,为什么需要数据库,也是很这门课,一步一步慢慢解开我对数据库的各种疑惑。

image

那时候,我每天都兴奋地泡在图书馆里,研究SQL Server的各种特性和用法。我记得有一次,为了完成一个课程设计,我连续熬了三个通宵,终于成功地实现了数据的增删改查功能。当我看到屏幕上跳动的数字和图表时,那种成就感油然而生,那时候,十分有成就感。(现在想想,那玩意真垃圾)。

image

二、探索的热情:初识MySQL

2018年,我在一次技术交流活动中,第一次听到了MySQL的名字。原来,除了SQL Server之外,还有这么多其他的数据库系统可供选择,我抱着试一试的心态,开始接触MySQL。

刚开始的时候,我对MySQL的感觉并不好。它的界面和操作方式与SQL Server截然不同,让我感到有些不适应。但是,其实SQL语句互通的,所以从SQL Server转MySQL,过程其实很快,随着我对MySQL的了解越来越深入,我逐渐发现了它的独特魅力。

MySQL的轻量级和灵活性让我为之倾倒。我可以轻松地搭建起一个高效、稳定的数据库系统,满足各种复杂的需求。而且,MySQL的社区也非常活跃,我可以随时找到各种教程和解决方案,后面发现,MySQL是真的香。

image

三、深爱的坚定:从MySQL 5.0到MySQL 8.0

2019年,我开始了我的第一份工作。公司使用的是MySQL 5.0版本。虽然这个版本已经比较老旧,但我却非常珍惜这次机会。我像一块海绵一样,贪婪地吸收着MySQL的知识和经验。

随着时间的推移,我逐渐熟悉了MySQL的工作原理和优化技巧。我从一开始只会创建简单的数据表,到现在能够进行复杂的SQL优化和性能调优。我开始意识到,数据库不仅仅是一个存储数据的工具,更是一个需要精心呵护和管理的孩子。

后来,跳槽到其他公司,新公司项目使用的是MySQL 8.0版本。虽然一开始我对这个新版本有些抵触情绪,但在尝试之后,我不得不承认MySQL 8.0给我带来了很多惊喜,其实对5.0的兼容做的挺好的,开发者基本没什么感知,更多的是,新功能的支持。

MySQL 8.0在性能、安全性和易用性方面都有了很大的提升。我开始利用新版本的特性进行开发和优化工作,感觉自己的工作效率和代码质量都有了很大的提高。

image

四、七年之痒的挑战与成长

现在回想起来,我已经与数据库相识七年了。在这七年里,我经历了从初识到深爱的过程。每一段经历都让我成长了许多。

在这七年里,我也遇到了很多挑战和困难。有时候,我会因为一个复杂的SQL查询而彻夜难眠;有时候,我会因为一个性能瓶颈而焦头烂额。但是,正是这些挑战和困难,让我更加深入地理解了数据库的原理和奥秘。

现在,我已经不再是那个对数据库一窍不通的小白了。我可以熟练地进行数据库设计、开发和优化工作;我可以自信地解决各种数据库问题和挑战。我知道,这一切都离不开我对数据库的热爱和执着。现在工作不仅仅是CURD,每次遇到慢查询问题,除了代码逻辑优化,同时也会考虑是否是SQL编写有问题。

image

五、幽默点缀:数据库也幽默

在数据库的世界里,其实也有很多幽默的元素。记得有一次,我在做一个数据迁移的项目时,需要将一个包含几百万条记录的表从一个数据库迁移到另一个数据库。由于数据量巨大,迁移过程持续了整整一天一夜。

当我第二天早上满怀期待地打开新数据库时,却发现所有的记录都不翼而飞了!我瞬间感到一阵眩晕和绝望。然而,在我即将崩溃的那一刻,我发现原来是我在迁移过程中不小心将目标数据库的表名写错了!

这种低级错误让我哭笑不得。我想,如果数据库会说话的话,它一定会嘲笑我:“你怎么这么粗心大意啊!”

还有一次,我在做一个复杂的SQL查询时,为了让查询结果更加直观易懂,我在SELECT语句中使用了大量的CASE WHEN语句进行条件判断和数据转换。当我满怀信心地将查询结果展示给同事看时,他却一脸懵逼地问我:“你这是什么乱码啊?我看不懂!”

我仔细一看,发现自己确实写了一个非常复杂的查询语句,其中包含了大量的嵌套和逻辑判断。我顿时感到一阵羞愧和尴尬。我想,如果数据库会吐槽的话,它一定会说:“你怎么这么爱炫技啊!简单点不好吗?”

image

上述SQL片段,是不是看起来很繁琐。

六、代码说明:优化SQL查询

当然,在数据库的世界里,幽默只是调味品,真正的精髓还是在于技术。下面,我将通过一个简单的例子来说明如何优化SQL查询。

假设我们有一个订单表orders和一个订单详情表order_details,我们需要查询某个时间段内的订单总金额。初始的查询语句可能如下所示:

SELECT 
    o.order_id, 
    SUM(od.quantity * od.price) AS total_amount
FROM 
    orders o 
JOIN 
    order_details od ON o.order_id = od.order_id 
WHERE 
    o.order_date BETWEEN '2023-01-01' AND '2023-12-31' 
GROUP BY 
    o.order_id;

这个查询语句虽然可以正确地计算出订单总金额,但如果订单量和数据量非常大,它的执行效率可能会很低。我们可以从以下几个方面进行优化:

  1. 索引优化:确保order_dateorder_id字段上有合适的索引,以加快查询速度。
  2. 减少数据扫描量:如果只需要查询某个特定客户的订单总金额,可以在WHERE子句中添加客户ID的条件,以减少需要扫描的数据量。
  3. 避免使用函数和计算:尽量避免在WHERE子句中使用函数和计算,因为这会导致索引失效。

优化后的查询语句可能如下所示:

SELECT 
    o.order_id, 
    SUM(od.quantity * od.price) AS total_amount
FROM 
    orders o 
JOIN 
    order_details od ON o.order_id = od.order_id 
WHERE 
    o.order_date BETWEEN '2023-01-01' AND '2023-12-31' 
    AND o.customer_id = 'some_customer_id'
GROUP BY 
    o.order_id;

通过这些优化措施,我们可以显著提高查询的执行效率。

其实现在工作,更多想做的也是SQL,当实现从查询2s到2ms,那种感受是十分有成就感的。

七、结语

回首过去七年,我与数据库的感情经历了从初识到深爱(谋生)的过程。虽然过程中充满了挑战和困难,但这些经历却让我更加成熟和坚强。

最后,我想说的是,数据库不仅仅是一个技术工具,更是一个陪伴我成长、见证我蜕变的伙伴。在未来的日子里,我会继续努力学习、不断进步,与数据库一起书写更加精彩的篇章!

image

标签:七年之痒,数据库,MySQL,id,初识,SQL,查询,order
From: https://www.cnblogs.com/xiaomingguo/p/18362329

相关文章

  • 图数据库在社交网络分析中的应用
    图数据库在社交网络分析中的应用广泛且深入,其独特的数据结构和高效的查询能力为理解和分析复杂的社交网络关系提供了强有力的支持。以下将详细探讨图数据库在社交网络分析中的多个方面,包括用户关系建模、推荐系统优化、实时社交分析、影响力分析、欺诈检测与安全、知识图谱......
  • mysql数据库中decimal数据类型比较大小
    在MySQL中,DECIMAL数据类型用于存储精确的数值,它非常适合用于需要高精度计算的场景,如金融应用。当我们需要在MySQL数据库中比较DECIMAL类型数据的大小时,可以使用标准的比较运算符,如>,<,>=,<=,=和<>(或!=)。以下是一个详细的示例,说明如何在MySQL中使用DECIMAL数据类型并比较......
  • mysql数据库中decimal数据类型比较大小
    在MySQL中,DECIMAL数据类型用于存储精确的数值,它非常适合用于需要高精度计算的场景,如金融应用。当我们需要在MySQL数据库中比较DECIMAL类型数据的大小时,可以使用标准的比较运算符,如>,<,>=,<=,=和<>(或!=)。以下是一个详细的示例,说明如何在MySQL中使用DECIMAL数据类型并比较它......
  • 数据库基本操作
    数据库基本操作#数据库状态status;#简写\sshowprocesslist;Id:该字段表示当前会话的唯⼀标识符,每个会话都有⼀个唯⼀的ID。User:该字段表示当前会话的⽤户名。Host:该字段表示当前会话的主机名或IP地址。db:该字段表示当前会话正在使⽤的数据库名,如果为NULL,则表......
  • 200T 数据库非归档无备份恢复---惜分飞
    联系:手机/微信(+8617813235971)QQ(107644445)标题:200T数据库非归档无备份恢复作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]一套近200T的,6个节点的RAC,由于存储管线链路不稳定,导致服务器经常性掉盘,引起asm磁盘组频繁dismount......
  • 云计算实训30——mysql主从复制同步、mysql5.7版本安装配置、python操作mysql数据库、
    一、mysql主从复制及同步1、mysql主从自动开机同步2、配置mysql5.7版本mysql-5.7.44-linux-glibc2.12-x86_64.tar启动服务、登录对数据库进行基本操作3、使用python操纵mysql数据库4、编辑python脚本自动化操纵mysql数据库二、mycat读写分离......
  • 一文搞懂后端面试之数据库分布式事务【中间件 | 数据库 | MySQL | ACID】
    单库拆分为分库分表之后,一个巨大的挑战就是本地事务变成了分布式事务。事实上,即使没有分库分表,在微服务架构之下我们也还是会面临分布式事务的问题。前置知识分布式事务既可以是纯粹多个数据库实例之间的分布式事务,也可以是跨越不同中间件的业务层面上的分布式事务。前表......
  • 深入InnoDB核心:揭秘B+树在数据库索引中的高效应用
    目录一、索引页与数据行的紧密关联(一)数据页的双向链表结构(二)记录行的单向链表结构二、未创建索引情况(一)无索引下的单页查找过程以主键为搜索条件以非主键列为搜索条件(二)无索引下的多页查找过程三、InnoDB中的B+树索引方案初体会(一)前置说明行格式示意图页内格式示......
  • 003springboot图书个性化推荐系统的设计与实现———源码+数据库文件+万字文档+配套PP
     博主介绍:java高级开发,从事互联网行业六年,熟悉各种主流语言,精通java、python、php、爬虫、web开发,已经做了六年的毕业设计程序开发,开发过上千套毕业设计程序,没有什么华丽的语言,只有实实在在的写点程序。......
  • Spring Boot应用的数据库连接池管理
    SpringBoot应用的数据库连接池管理大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!数据库连接池是SpringBoot应用与数据库交互的重要组成部分,它帮助应用管理数据库连接,提高资源利用率和系统性能。SpringBoot内置了对多种数据库连接池的支持,包括Hik......