1,MySql 里面非 GROUP BY 的字段也可以出现在 SELECT 里面,MSSql 不行

  1. ## 以下语句 MySql 合法,将取分组后的第一条
  2. SELECT T.a FROM T GROUP BY (T.b)

2,执行 DELETE FROM 删除表中的数据,数据文件大小并不会变化,MySql 只是将数据标记为已删除

  1. DELETE FROM [table]
  2. OPTIMIZE TABLE [table]

3,可以使用 uuid 作为数据的主键,uuid 可以作为分布式的通用唯一标识符(Universally Unique Identifier)

  1. SELECT UUID()
  • uuid 是 当前时间 + 时钟序列 + 全局唯一机器识别号(优先网卡 MAC 地址)
  • uuid 的缺陷
    • 因为 uuid 是时间在前面,所以前面变动很快,然而 InnoDB 存储数据是以主键排序的,因为 uuid 生成的不连贯,所以导致插入效率低,且占用磁盘空间大(大量空的存储碎片,页分裂)
    • uuid 结果字符串过长,格式是 a3404b6c-6096-11eb-9f20-0242ac120002,即固定的 CHAR(36)
  • 解决 uuid 缺陷的方法
    • 将 uuid 变化快的时间部分放到后面,使得大量的 uuid 更容易被缓存,且磁盘上地址也更连续
    • 将固定的 CHAR(36) 的 uuid 已 BINARY(16) 存储,如果要使用有意义的数据当主键事,可以使用虚拟字段

      4,虚拟字段(Virtual Columns)

      MySql 5.7 之后,表的字段支持两种:
  • Virual Generated Columns,只将数据保存在数据字典(表的元数据)中
  • Stored Generated Columns,将数据持久化到磁盘

如果不指定的话,默认是虚拟字段