mysql 第6.6章 性能优化-创建表时的性能优化 mysql 第6.6章 性能优化-创建表时的性能优化

1小时前

①、永远为每张表设置一个 ID

给每张表建立自增的主键 ID,自增 ID 插入快,能避免页的分裂,减少碎片,尤其在做数据同步的时候 ,没有主键的表就像是没身份证,数据的比对更新删除都可能变乱套。

每张表都应该设置一个 ID 字段为主键,该主键应为 INT 或 UNSIGNED 类型,并设置上自动增加的 AUTO_INCREMENT 标志。因为使用 VARCHAR 类型的主键,会使得性能下降。

这里,只有一个情况是例外,那就是 “关联表” 的 “外键”,也就是说,这个表的主键,通过若干个别的表的主键构成。我们把这个情况叫做 “外键”。比如:有一个 “学生表” 有学生的 ID,有一个 “课程表” 有课程 ID,那么,“成绩表” 就是 “关联表” 了,其关联了学生表和课程表,在成绩表中,学生 ID 和课程 ID 叫 “外键” 其共同组成主键。

②、为搜索字段建索引

将 where 中用的比较频繁的字段建立索引,联合索引

③、使用 ENUM 而不是 VARCHAR

ENUM 类型是非常快和紧凑的。在实际上,其保存的是 TINYINT,但其外表上显示为字符串。这样一来,用这个字段来做一些选项列表变得相当的完美。

如果你有一个字段,比如 “国家”,你知道这些字段的取值是有限而且固定的,那么,你应该使用 ENUM 而不是 VARCHAR。

ENUM 是 MySQL 数据库特有的字段类型,使用后会影响迁移到其它数据库。所以,如果以后又改数据库的情况,一定要慎用。

④、尽可能的使用 NOT NULL

应该总是让你的字段保持 NOT NULL,因为这样节省空间(NULL 也是需要空间的)。

⑤、把 IP 地址存成 UNSIGNED INT

如果使用整形来存放 IP 而不是 VARCHAR(15) 字段,节省了很多的空间(需要写一个 IP 转换的函数)。

⑥、起名要规范

表名字段名统一小写加下划线,给每个字段加清晰的注释。相信我,不加注释的表,三个星期后的你,自己都看不懂。

⑦、禁用保留字

在创建表字段的时候,不要使用数据库官方的保留字。以前我们在适配信创的时候,发现老库中自定义的函数名跟新库的关键字 发生冲突,只能改库、改代码,这都是血淋淋的教训。

⑧、禁用外键

外键就像是紧箍咒,让表之间藕断丝连,更新删除都会变慢,还容易死锁,数据的一致性还是交给业务代码来管更加灵活高效。

⑨、字符集选 utf8mb4

记住 MySQL 里的 utf8 是间割版的,只有 utf8mb4 才是正宗的,能存表情特殊符号,妈妈再也不担心乱码了。

⑩、主业务表尽量采用 bigint

早期表主键使用的是 int,随着业务的发展,int 容量很快告急,最后被迫投入大量的人力升级为 bigint,这些年加的班全是当年脑子进的水。

阅读 3

mysql文章
带到手机上看