MySQL优化
1.性能优化:
1.1 表结构优化(下述建议针对数据量巨大,每一点空间都需要节省的情况,当然在设计初期能考虑到以下建议最好)
A:字段设计优化
1.1.1 整数类型:
1.对于整数int类型,数据量较大的情况下建议区分tinyint,int,bigint,三者所占据的空间有很大的差别,比如年龄,用tinint就可以了,没必要用后面两者,年龄再大也不过一百。
2.能确定不会使用负数,建添加unsigend定义,也是有效利用空间,比如还是年龄,tinint最大127,使用无符号的tinint最大值就变成255,就更加恰当。
3.固定精度的小数,不建议decimal,建议乘以固定倍数转成整数,可以大大大节省空间。
1.1.2 字符类型:
1. 定长字段,建议char类型
2. 不定长尽量varchar,且仅仅设定设当最大长度
3. 万不得已不使用text类型,其性能比varchar还要低
4. 建议使用整数存储定长字符,比如ip
1.1.3 时间类型
1. 尽量使用timestamp类型代替datetime, 其只占datetime的一半空间,但timestamp有一个特点就是不同时区查出来的不一样,还可以设置是否更新数据时自动更新时间。
2. 对于精确到 天的类型,用date类型就行只占三个字节,比timestamp还少
B:适当拆分:对于不经常查询的字段,尽量拆分出来放在另一个表,这样IO次数也会减少
C:适当冗余:对于频繁查询且需关联两张表查询的可以将其中一张表的某些字段适当冗余到一张表,但是要注意对于修改操作更加麻烦
D:尽量使用not null,NULL比较特殊,难以优化
1.2 索引优化
1.2.1 对于联合索引,遵循最左前缀原则