专栏首页程序小工MySQL数据库常见名词对比

MySQL数据库常见名词对比

摘要

MySQL 由于性能高、成本低、可靠性好,已经成为最流行的开源数据库,因此被广泛地应用在 Internet 上的中小型网站中。随着 MySQL 的不断成熟,它也逐渐用于更多大规模网站和应用,比如维基百科、Google 和 Facebook 等网站。非常流行的开源软件组合 LAMP 中的“M”指的就是 MySQL。

1.存储引擎 — MyISAM vs InnoDB

(1)存储方式

每种存储引擎下的数据表创建成功后都会生成相应格式的文件

  • MyISAM: .frm – 结构 .MDY – 数据 .MYI – 索引
  • InnoDB: .frm – 结构 .ibd – 数据+索引

(2)物理顺序

MyISAM: 依插入顺序

InnoDB: 依主键顺序

(3)特定功能

MyISAM:

  • 支持全文索引(鸡肋)
  • 存储空间少
  • 文件级别快速备份(将生成的文件直接拷贝到相应位置,需要还原时直接拷贝回来)

InnoDB:

  • 外键
  • 事务
  • 行级锁定

(4)并发处理能力

MyISAM:

  • 锁定粒度:表级
  • 并发插入(在表中执行其他操作时,可以同事执行插入工作,大多数情况是不需要考虑锁的问题。因为插入不影响其他记录的操作,在最后插入)

InnoDB:

  • 锁定粒度:表级 + 行级
  • 多版本并发控制 MVCC(Multi-Version Concurrency Control),实现无阻塞读操作

Multi-Version Concurrency Control 多版本并发控制,MVCC 是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问;在编程语言中实现事务内存。

(5)空间空洞

MyISAM:

  • 删除表中大量记录后,表结构的文件大小没有变化。需要手动修复空洞空间。repair table table_name

InnoDB:

  • 没有空洞现象。

(6)总结

MyISAM: 以读取和插入为主

InnoDB: 以更新和删除为主(写锁[独占锁,阻塞其他的所有操作])

总结:直接用 InnoDB。

2.字段类型

(1)varchar vs char

varchar:

  • 优点:变长,占用的空间随着内容的增长而变大,节约空间
  • 缺点:速度稍慢

char:

  • 优点:速度快
  • 缺点:定长,永远占用 4 个直接,无论存储 0,-1,1234567 占用的空间是一致的。

(2)datetime vs timestamp

timestamp: 占用较少的空间,存储时间的范围小

datetime: 占用较多的空间,存储时间范围大

(3)decimal vs double

decimal: 定点数,数据精确。变长的数据类型,随着存储的数据有效位增加,而占用更多的存储空间。

double:浮点数,精度丢失。定长的数据类型,永远占用 8 个直接的存储空间(float4 个字节)

(4)enum vs set

enum: 枚举,使用一个数表示一个枚举值,占 2 个字节,一共 2^16 个枚举值

set: 使用一个位表示一个元素值,占用 8 个直接,一共 8*8 个元素值

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • PHP性能优化

    PHP 运行环境的性能考虑在 php 深入学习中需要逐步强化意识,并着手实现,其中对于性能分析的相关工具也需要有一定的掌握,比如压力测试工具 Apache Be...

    程序小工
  • 【转】PHP发展路径

    按照了解的很多 PHP/LNMP 程序员的发展轨迹,结合个人经验体会,抽象出很多程序员对未来的迷漫,特别对技术学习的盲目和慌乱,简单梳理了这个每个阶段 PHP ...

    程序小工
  • 【Linux】系统学习Crontab定时任务

    crontab 是一个用于设置周期性执行任务的工具。目前服务器端的运行环境大多数为 Linux,在日常的运营和维护中会有很多需要定期执行的操作,其中有些操作是可...

    程序小工
  • MySQL 存储引擎 原

    使用MEMORY存储引擎的表,其数据存储在内存中,且行的长度固定,这两个特点使得MEMORY存储引擎非常快。

    wuweixiang
  • 一个GO语言性能问题的发现和解决

    事情起因于公司一位同事在内部邮件组中post了一个问题,一个使用了go1.8.3写的业务程序跑了一段时间后出现部分goroutine卡在等待一个锁ForkLoc...

    李海彬
  • jquery鼠标事件

    click()   为点击事件绑定一个事件处理函数,或者触发元素点击事件。   .click( handler(eventObject) ) ...

    用户1197315
  • Arthas学习笔记

    最近通过Arthas解决了一个druid连接池的一个问题。但考虑自己对arthas不是不太熟悉,所以还是好好复习一下。以下是自己的学习笔记。

    程序员_备忘录
  • jquery 表单事件

    .blur()    当元素失去焦点的时候触发事件。   .blur(handler(eventObject))     handler(even...

    用户1197315
  • Spring Boot+Vue前后端分离,如何避免前端页面 404

    问题倒不难,但是这个问题之前被松哥忽略了。前两天有小伙伴提出这个疑问,我觉得有必要写篇文章和大家捋一捋这个问题。

    江南一点雨
  • Leetcode 387:字符串中的第一个唯一字符

    和出现次数有关的,不要犹豫,hash 具体思路:首先用字典统计每个字符出现的频率,然后顺序遍历字符串,并在字典中进行查找,出现频率为1,返回。 时间复杂度O(n...

    故事尾音

扫码关注云+社区

领取腾讯云代金券