内容网站模板,网站搜索优化,免费网站域名注册,社交网站开发语言#x1f600;前言 在数据库管理系统中#xff0c;存储引擎起着核心的角色#xff0c;它决定了数据管理和存储的方式。MySQL作为一个领先的开源关系型数据库管理系统#xff0c;提供了多种存储引擎来满足不同的需求和优化不同的应用。除了选择合适的存储引擎#xff0c;数据… 前言 在数据库管理系统中存储引擎起着核心的角色它决定了数据管理和存储的方式。MySQL作为一个领先的开源关系型数据库管理系统提供了多种存储引擎来满足不同的需求和优化不同的应用。除了选择合适的存储引擎数据库的设计还涉及到范式设计和表设计这两者都对数据库的性能和数据一致性有深远的影响。在本文中我们将探讨MySQL的各种存储引擎比较MyISAM和InnoDB两种流行的存储引擎深入数据库的范式设计并探讨在数据库表设计时应如何选择合适的字段。此外我们还将讨论在MySQL中记录货币时应选择哪种字段类型。 个人主页尘觉主页
个人简介大家好我是尘觉希望我的文章可以帮助到大家您的满意是我的动力 在csdn获奖荣誉: csdn城市之星2名 Java全栈群星计划top前5 端午大礼包获得者 阿里云专家博主 亚马逊DyamoDB结营 欢迎大家这里是CSDN我总结知识的地方欢迎来到我的博客感谢大家的观看 如果文章有什么需要改进的地方还请大佬不吝赐教 先在次感谢啦 文章目录 MySQL中有哪些存储引擎MyISAM和InnoDB的区别是什么?请概述下数据库的范式设计数据库表设计时字段你会如何选择mysql里记录货币用什么字段类型好总结 MySQL中有哪些存储引擎
InnoDB存储引擎
InnoDB是MySQL的默认事务型引擎也是最重要、使用最广泛的存储引擎。它被设计用来处理大量的短期(short-lived)事务应该优先考虑InnoDB引擎。
MylSAM存储引擎
在MySQL 5.1及之前的版本MyISAM是默认的存储引擎。MyISAM提供了大量的特性包括全文索引、压缩、空间函数GIS等但MyISAM不支持事务和行级锁而且崩溃后无法安全恢复。MyISAM对整张表加锁很容易因为表锁的问题导致典型的的性能问题。
Mrg_MylSAM
Merge存储引擎是一组MyIsam的组合也就是说他将MyIsam引擎的多个表聚合起来但是他的内部没有数据真正的数据依然是MyIsam引擎的表中但是可以直接进行查询、删除更新等操作。
Archive引擎
Archive存储引擎只支持INSERT和SELECT操作会缓存所有的写并利用zlib对插入的行进行压缩所以比MyISAM表的磁盘I/O更少。但是每次SELECT查询都需要执行全表扫描。所以Archive表适合日志和数据采集类应用Archive引擎是一个针对高速插入和压缩做了优化的简单引擎。
Blackhole引擎
Blackhole引擎没有实现任何的存储机制它会丢弃所有插入的数据不做任何保存。可以在一些特殊的复制架构和日志审核时发挥作用。但这种引擎在应用方式上有很多问题因此并不推荐。
CSV引擎
CSV引擎可以将普通的CSV文件(逗号分割值的文件作为MySQL 的表来处理但这种表不支持索引。因此CSV引擎可以作为一种数据交换的机制非常有用。
Federated引擎
Federated引擎是访问其他MySQL服务器的一个代理它会创建一个到远程MySQL服务器的客户端连接并将查询传输到远程服务器执行然后提取或者发送需要的数据。默认是禁用的。
Memory 引擎
Memory表至少比MyISAM 表要快一个数量级数据文件是存储在内存中。Memory表的结构在重启以后还会保留但数据会丢失。
Memroy表在很多场景可以发挥好的作用:
用于查找(lookup或者映射(mapping表例如将邮编和州名映射的表。
用于缓存周期性聚合数据(periodically aggregated data)的结果。
用于保存数据分析中产生的中间数据。
Memory表支持 Hash索引因此查找操作非常快。Memroy表是表级锁因此并发写入的性能较低每行的长度是固定的可能导致部分内存的浪费。
NDB集群引擎
使用MySQL服务器、NDB集群存储引擎以及分布式的、share-nothing 的、容灾的、高可用的NDB数据库的组合被称为MySQL集群(MySQL Cluster)。
MyISAM和InnoDB的区别是什么?
MyISAM引擎是5.1版本之前的默认引擎支持全文检索、压缩、空间函数等但是不支持事务和行级锁所以一般用于有大量查询少量插入的场景来使用而且MyISAM不支持外键并且索引和数据是分开存储的。
InnoDB是基于聚簇索引建立的和MyISAM相反它支持事务、外键并且通过MVCC来支持高并发索引和数据存储在一起。
请概述下数据库的范式设计
目前关系数据库有六种范式常见范式第一范式1NF是对属性的原子性约束要求属性具有原子性不可再分解第二范式2NF是对记录的惟一性约束要求记录有惟一标识即实体的惟一性第三范式3NF是对字段冗余性的约束即任何字段不能由其他字段派生出来它要求字段没有冗余。。
范式化设计优缺点:
优点:可以尽量得减少数据冗余使得更新快体积小缺点:对于查询需要多个表进行关联减少写得效率增加读得效率更难进行索引优化
反范式化:
优点:可以减少表得关联可以更好得进行索引优化缺点:数据冗余以及数据异常数据得修改需要更多的成本常见的反范式设计有缓存、冗余等等。
数据库表设计时字段你会如何选择
更小的通常更好应该尽量使用可以正确存储数据的最小数据类型。更小的数据类型通常更快因为它们占用更少的磁盘、内存和CPU缓存并且处理时需要的CPU周期也更少。但是要确保没有低估需要存储的值的范围。
简单就好简单数据类型的操作通常需要更少的CPU周期。例如整型比字符操作代价更低比如应该使用MySQL内建的类型而不是字符串来存储日期和时间。
尽量避免NULL如果查询中包含可为NULL的列对MySQL来说更难优化因为可为NULL的列使得索引、索引统计和值比较都更复杂。可为NULL的列会使用更多的存储空间在MySQL里也需要特殊处理。当可为NULL的列被索引时每个索引记录需要一个额外的字节。
mysql里记录货币用什么字段类型好
MySQL既支持精确类型的存储DECIMAL类型也支持不精确类型存储FLOAT和 DOUBLE类型。对于货币记录应该选择DECIMAL类型但是DECIMAL类型是以字符串形式存放的所以性能会有影响。
作为替代方案可以在数据量比较大的而且要求精度时虑使用BIGINT代替DECIMAL将需要存储的货币单位根据小数的位数乘以相应的倍数即可。
总结
通过对MySQL的多种存储引擎进行了深入探讨我们可以看到每种引擎都有其独特的特点和应用场景。InnoDB和MyISAM作为最常用的存储引擎有着明显的差异和各自的优势。在数据库设计中我们还探讨了范式设计的重要性和它的优缺点强调了在设计数据库表时选择正确字段类型的重要性。
我们了解到范式设计可以帮助我们创建结构良好、无冗余的数据库而正确的字段选择可以优化数据库的性能并保证数据的一致性。特别是在处理货币类型的数据时选择正确的字段类型是非常关键的。
通过深入探讨MySQL的这些核心概念和特性我们不仅可以更好地理解MySQL数据库的工作原理还可以学会如何优化数据库设计来满足特定的应用需求和优化性能。希望这篇文章能为您提供一个全面的视角帮助您在使用MySQL时做出更明智的决策。
热门专栏推荐 想学习vue的可以看看这个
java基础合集
数据库合集
redis合集
nginx合集 linux合集
手写机制
微服务组件
spring_尘觉
springMVC
mybits
等等等还有许多优秀的合集在主页等着大家的光顾感谢大家的支持
欢迎大家加入我的社区 尘觉社区 文章到这里就结束了如果有什么疑问的地方请指出诸佬们一起来评论区一起讨论 希望能和诸佬们一起努力今后我们一起观看感谢您的阅读 如果帮助到您不妨3连支持一下创造不易您们的支持是我的动力