总结一些MySQL陷阱

这次给大家带来总结一些MySQL陷阱,在使用MySQL中的注意事项有哪些,下面就是实战案例,一起来看一下。

Mysql安装简单,速度较快,功能丰富。另外它还是开源运动的标杆,它的伟大成就向我们展示了一个成功的公司是可以建立在开源代码之上的。

然而用过mysql的人都曾对着显示器挥舞过拳头。但你不可能发明一种每秒能保存成千上万行互联网数据,并且一点错误都没有的技术吧。

为了在这个夏天躁起来,我们列举了8个抱怨开源关系型数据库的理由。下面列举的理由中不仅限于 MySQL,有一些是针对关系型数据库的。如果我们没有理清楚关系型数据库和 MySQL,我们将会永远陷入90年代的思想上。我们需要推倒然后重建这些。或者我们转向使用一个最近流行的,存在时间没有长到可以列出一堆像下面一样的理由的数据库。

1、根深蒂固的bugs

任何大的软件包都有 bug。但稍微深入了解一下,就会发现和 Mysql 相关的 bugs 自成体系。突然你就需要留心,因为 NULL 并不是以同样的方式出现,外键约束也没有像你想像的那样执行,连主键自动增长也会出错。

小问题大量存在,而且并不总是可以修复,这就是为什么一些人保持一个列表。还好 MySQL 维护着一个非常好的 bug 报告系统,让我们可以知道我些我们无法想像的事情,知道其他人也在经受同样的磨难。

2、关系表的不灵活性

关系表具有条理性,条理性是好的——但是,它使得程序员不得不编造或硬塞一些数据到已经定义好模式的列中。NoSQL开始越来越受到欢迎的原因之一,就是它为程序员提供了足够的灵活性,来加速数据库的使用。如果一个街道地址需要增加一行,那么,你可以将它很容易地插入到一个NoSQL文档中。如果你想添加一个完整的新的数据块,无论它包含什么内容,文档模型也可以原封不动地接受你的数据,而不必改为它要求的数据格式。

试想一下,你用整数格式建立了一个全部是邮编的表格。这个表是十分高效的,它执行的规则也很好。突然一次,有人上传了一个使用了连字符的九位数邮编。或者还有可能,你得到了一位来自加拿大客户的信件,上面写有邮政编码。

这时,一切都乱了。老板要求网站要在几小时内恢复正常工作。然而,现在已经没有时间来重建数据库。程序员可以做什么?也许,可以使用黑客手段把加拿大邮政编码由base64的数字格式改为base 10格式?或者设置一个使用转义编码的辅助表格,用来说明真正的邮政编码或者其他?谁知道呢?到处都有黑客,他们都是危险的。但你没有时间来搞定它。

MySQL的关联规则让每个人都诚实和谨慎,但它能强制我们避开易受攻击和欺骗的麻烦。

3、JOIN联合查询

曾几何时,将数据分表保存是计算机科学史上的伟大创新。分开后的表不仅结构简单,也简化了使用。但它却需要使用join语句进行查询。

sql通过一系列join构建的复杂查询将开发者推入了困惑与绝望的深渊。而且存储引擎也需要以最优的方式来高效地解析join语句。开发者需要绞尽脑汁编写查询语句,然后数据库对其进行解析。

这就是很多注重运行速度的开发者放弃数据分表转而使用不规范数据表的原因。不区分数据实体,将所有数据保存到一个大表中——以避免复杂的查询。这样确实很快,并且服务器也不会耗尽内存。

磁盘空间现在很廉价。8TB的磁盘已经在售,更大的也要上市了。我们不再需要为使用join而绞尽脑汁了。

4、分支的混乱

是的,一个可靠的、得到良好支持的MySQL分支,可以带来竞争和选择,但是它也引起困惑和混乱。更糟糕的是,一个称为MariaDB的MySQL分支,由Monty Widenius维护着。他同样也在参与编写MySQL。那么,MariaDB是真正独立的值得我们拥护的吗?或者它是MySQL?我们是否应该坚持使用由创建原始MySQL数据库的组织运营的核心代码?或者我们应该加入那些被认为更聪明的,往往很酷的背叛者?

还有,我们应当如何获得关于兼容性的信息?一方面,我们被确信MariaDB和MySQL十分地相似。另一方面,我们要相信有差异——不然为什么大家都在争论它?也许它们在性能和我们查询的范围内,在两个阵营中工作方式相同?但也许他们不同-或者将来会不同。

5、存储引擎混乱

MySQL不是事实上的同一的数据库;它由几个数据库组成,它们的大多数细节都被统一的表面所掩盖。在开始的时候,有一个MyISAM引擎,它很快但是在前后一致上不能做到完备。有时候你需要速度并且可以接受不一致的结果时是很好的。

当人们需要更多时,具备完整事务支持的InnoDB出现了。但这还不够。现在,它可能有20种存储引擎的选择——这足以使一个数据库管理员疯狂。当然,有些时候在不同的存储引擎之间切换而不必重写你的SQL是很好的,但是切换后总会带来混乱。这个表格我选择的引擎是 MyISAM 还是 innoDB 呢?或者,我决定输出的数据是CSV格式的吗?

6、盈利的动机

虽然 MySQL 是一款成功的开源产品,但它仍然是一门生意,里面满是靠它获得薪水的专业开发者。当大多数用户在持续地享受开源许可证带来的最佳体验时,毫无疑问这家公司还在为赚取足够的钱来维持运营而努力。这导致自由代码在“社区版”和出售给企业的完整产品之间产生了奇怪的分岐。
你应该付钱吗?你在这里挣到了多少钱?在社区版之上开展经营行为是否公平?企业版中额外的功能,是否只是一个噱头来引诱我们不断付费呢?这至少说明一点,它是另一组需要回答的问题。选用哪个版本?遵照哪种许可证?选用它的哪个功能集?

7、原生 JSON 支持的缺乏

看 MySQL 的年龄最好的办法是安装它,然后你会意识到需要添加更多的驱动程序使它可用。MySQL 通常在 3306 端口上通信,它一般输出的是它自己难以理解的格式化数据。如果你想让你的代码和它通信,你必须添加另一层的代码,将 MySQL 的语言转换成有用的东西。这些层的代码,以库的形式分发,经常需要人们购买一个商业的许可证。

现代数据存储层通常直接以 JSON 通信。虽然 MySQL 和 MariaDB 现在有能力解析 SQL 中的 JSON 部分,但这还远远不够好,原生的 JSON 接口已经在 CouchDB,MongoDB,或任何最新的工具中广泛使用。

8、封闭源和专有模块的兴起

我说过 MySQL 是开源的吗?它是,但除了一些在”开源核心“周边开发的一些较新的、非开源的代码、专有模块。程序员需要吃饭,Oracle需要拿它的辛苦成果来换钱,这是商业的现实之一。它不像那些医院,使用 MySQL 可以免费医疗护理。它不象那些农民,使用 MySQL 可以赠送食物。

要求 MySQL 始终坚持在一个很高的标准是有点不公平的,因为开源的成功可能是一个圈套。这是因为它开始可以免费,但并不意味着它可以始终如此。如果企业需要许多新的功能,他们将不得不用这种或那种方式付费。有时向 Oracle 付费,比自己来编写代码要便宜得多。有时商业的、不开源的代码是有意义的。事实不言而喻。

相信看了本文案例你已经掌握了方法,更多精彩请关注创想鸟其它相关文章!

推荐阅读:

PHP、MySQL和Apache的学习 PHP、MySQL和Apache的学习

PHP是程式语言、MySQL是资料库,要学好任何一种都不是件容易的事,而我们,还要将它做出成果出来!很难吗?不会的!有好的方法、好的流程,其实是可以很轻松的学会,并且应用在网页上的。书里所介绍的是观念、流程,一个步骤一个步骤依照需求,就可以做出我们要的结果,不怕做不出来,希望藉由这本书,可以让你将这些观念实现在你的网站里。PHP & MySQL的学习,只要有正确的观念、正确

PHP、MySQL和Apache的学习 442 查看详情 PHP、MySQL和Apache的学习

Vue制作图片轮播

JS获取select下拉框中第一顺位元素内的值

安装Electron失败怎么处理

以上就是总结一些MySQL陷阱的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1040065.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月2日 04:31:11
下一篇 2025年12月2日 04:31:54

相关推荐

  • AO3镜像站备用镜像网址_AO3镜像站快速访问官网

    AO3镜像站备用网址包括ao3mirror.com和xiaozhan.icu,当主站archiveofourown.org无法访问时可切换使用,二者均同步更新内容并支持多语言检索与离线下载功能。 AO3镜像站备用镜像网址在哪里?这是不少网友都关注的,接下来由PHP小编为大家带来AO3镜像站快速访问官…

    2025年12月6日 软件教程
    100
  • Pboot插件缓存机制的详细解析_Pboot插件缓存清理的命令操作

    插件功能异常或页面显示陈旧内容可能是缓存未更新所致。PbootCMS通过/runtime/cache/与/runtime/temp/目录缓存插件配置、模板解析结果和数据库查询数据,提升性能但影响调试。解决方法包括:1. 手动删除上述目录下所有文件;2. 后台进入“系统工具”-“缓存管理”,勾选插件、…

    2025年12月6日 软件教程
    100
  • Pboot插件数据库连接的配置教程_Pboot插件数据库备份的自动化脚本

    首先配置PbootCMS数据库连接参数,确保插件正常访问;接着创建auto_backup.php脚本实现备份功能;然后通过Windows任务计划程序或Linux Cron定时执行该脚本,完成自动化备份流程。 如果您正在开发或维护一个基于PbootCMS的网站,并希望实现插件对数据库的连接配置以及自动…

    2025年12月6日 软件教程
    000
  • 今日头条官方主页入口 今日头条平台直达网址官方链接

    今日头条官方主页入口是www.toutiao.com,该平台通过个性化信息流推送图文、短视频等内容,具备分类导航、便捷搜索及跨设备同步功能。 今日头条官方主页入口在哪里?这是不少网友都关注的,接下来由PHP小编为大家带来今日头条平台直达网址官方链接,感兴趣的网友一起随小编来瞧瞧吧! www.tout…

    2025年12月6日 软件教程
    000
  • Vue.js应用中配置环境变量:灵活管理后端通信地址

    在%ignore_a_1%应用中,灵活配置后端api地址等参数是开发与部署的关键。本文将详细介绍两种主要的环境变量配置方法:推荐使用的`.env`文件,以及通过`cross-env`库在命令行中设置环境变量。通过这些方法,开发者可以轻松实现开发、测试、生产等不同环境下配置的动态切换,提高应用的可维护…

    2025年12月6日 web前端
    000
  • JavaScript响应式编程与Observable

    Observable是响应式编程中处理异步数据流的核心概念,它允许随时间推移发出多个值,支持订阅、操作符链式调用及统一错误处理,广泛应用于事件监听、状态管理和复杂异步逻辑,提升代码可维护性与可读性。 响应式编程是一种面向数据流和变化传播的编程范式。在前端开发中,尤其面对复杂的用户交互和异步操作时,J…

    2025年12月6日 web前端
    000
  • 环境搭建docker环境下如何快速部署mysql集群

    使用Docker Compose部署MySQL主从集群,通过配置文件设置server-id和binlog,编写docker-compose.yml定义主从服务并组网,启动后创建复制用户并配置主从连接,最后验证数据同步是否正常。 在Docker环境下快速部署MySQL集群,关键在于合理使用Docker…

    2025年12月6日 数据库
    000
  • 如何在mysql中分析索引未命中问题

    答案是通过EXPLAIN分析执行计划,检查索引使用情况,优化WHERE条件写法,避免索引失效,结合慢查询日志定位问题SQL,并根据查询模式合理设计索引。 当 MySQL 查询性能下降,很可能是索引未命中导致的。要分析这类问题,核心是理解查询执行计划、检查索引设计是否合理,并结合实际数据访问模式进行优…

    2025年12月6日 数据库
    000
  • VSCode入门:基础配置与插件推荐

    刚用VSCode,别急着装一堆东西。先把基础设好,再按需求加插件,效率高还不卡。核心就三步:界面顺手、主题舒服、功能够用。 设置中文和常用界面 打开软件,左边活动栏有五个图标,点最下面那个“扩展”。搜索“Chinese”,装上官方出的“Chinese (Simplified) Language Pa…

    2025年12月6日 开发工具
    000
  • 如何在mysql中安装mysql插件扩展

    安装MySQL插件需先确认插件文件位于plugin_dir目录,使用INSTALL PLUGIN命令加载,如INSTALL PLUGIN keyring_file SONAME ‘keyring_file.so’,并确保用户有SUPER权限,最后通过SHOW PLUGINS验…

    2025年12月6日 数据库
    000
  • VSCode性能分析与瓶颈诊断技术

    首先通过资源监控定位异常进程,再利用开发者工具分析性能瓶颈,结合禁用扩展、优化语言服务器配置及项目设置,可有效解决VSCode卡顿问题。 VSCode作为主流的代码编辑器,虽然轻量高效,但在处理大型项目或配置复杂扩展时可能出现卡顿、响应延迟等问题。要解决这些性能问题,需要系统性地进行性能分析与瓶颈诊…

    2025年12月6日 开发工具
    000
  • php查询代码怎么写_php数据库查询语句编写技巧与实例

    在PHP中进行数据库查询,最常用的方式是使用MySQLi或PDO扩展连接MySQL数据库。下面介绍基本的查询代码写法、编写技巧以及实用示例,帮助你高效安全地操作数据库。 1. 使用MySQLi进行查询(面向对象方式) 这是较为推荐的方式,适合大多数中小型项目。 // 创建连接$host = ‘loc…

    2025年12月6日 后端开发
    000
  • 如何在mysql中定期清理过期备份文件

    通过Shell脚本结合cron定时任务实现MySQL过期备份文件自动清理,首先统一备份命名格式(如backup_20250405.sql)并存放在指定目录(/data/backup/mysql),然后编写脚本使用find命令删除7天前的.sql文件,配置每日凌晨2点执行的cron任务,并加入日志记录…

    2025年12月6日 数据库
    000
  • VSCode的悬浮提示信息可以自定义吗?

    可以通过JSDoc、docstring和扩展插件自定义VSCode悬浮提示内容,如1. 添加JSDoc或Python docstring增强信息;2. 调整hover延迟与粘性等显示行为;3. 使用支持自定义提示的扩展或开发hover provider实现深度定制,但无法直接修改HTML结构或手动编…

    2025年12月6日 开发工具
    000
  • php数据库如何实现数据缓存 php数据库减少查询压力的方案

    答案:PHP结合Redis等内存缓存系统可显著提升Web应用性能。通过将用户信息、热门数据等写入内存缓存并设置TTL,先查缓存未命中再查数据库,减少数据库压力;配合OPcache提升脚本执行效率,文件缓存适用于小型项目,数据库缓冲池优化和读写分离进一步提升性能,推荐Redis为主并防范缓存穿透与雪崩…

    2025年12月6日 后端开发
    000
  • 如何在mysql中使用角色组合优化权限管理

    答案:MySQL角色通过封装权限实现集中管理。创建如app_reader等角色并授予权限,再分配给用户alice并设默认角色,支持组合使用,定期审计并通过系统视图查看,提升安全与运维效率。 在MySQL中,角色(Role)是一种强大的权限管理工具,能够简化用户权限的分配与维护。通过创建角色并将其赋予…

    2025年12月6日 数据库
    000
  • 优化PDF中下载链接的URL显示:利用HTML title 属性

    在pdf文档中,当包含下载链接时,完整的url路径通常会在鼠标悬停时或直接显示在链接文本中,这可能不符合预期。本文将探讨为何传统方法如`.htaccess`重写或javascript不适用于pdf环境,并提出一种利用html “ 标签的 `title` 属性来定制链接悬停显示文本的解决方…

    2025年12月6日 后端开发
    000
  • 如何在mysql中使用索引提高查询效率

    合理创建索引可显著提升MySQL查询效率,应优先为WHERE、JOIN、ORDER BY等高频字段建立B-Tree复合索引,如CREATE INDEX idx_status_created ON users(status, created_at, id),并遵循最左前缀原则;避免在索引列使用函数或前…

    2025年12月6日 数据库
    000
  • Phaser 3游戏画布响应式布局:实现高度适配与宽度裁剪

    本文深入探讨phaser 3游戏画布在特定响应式场景下的布局策略,尤其是在需要画布高度适配父容器并允许左右内容裁剪时。通过结合phaser的scalemanager中的`height_controls_width`模式与精细的css布局,本教程将展示如何实现一个既能保持游戏画面比例,又能完美融入不同…

    2025年12月6日 web前端
    000
  • PHP中向数组对象添加或修改属性的实用指南

    本教程详细介绍了如何在php中高效地向数组中的对象添加或修改属性,尤其是在处理json数据时。文章强调了利用php内置的`json_decode()`和`json_encode()`函数进行数据转换和操作的重要性,避免手动构建json字符串,从而确保数据结构的完整性和代码的健壮性。 在PHP开发中,…

    2025年12月6日
    000

发表回复

登录后才能评论
关注微信