【潘森教育】优化现有 MySQL 数据库:MySQL

数据库设计

表字段避免 null 值出现,null 值很难查询优化且占用额外的索引空间,推荐默认数字 0 代替 nullMySQL

尽量使用 INT 而非 BIGINT,如果非负则加上 UNSIGNED(这样数值容量会扩大一倍),当然能使用 TINYINT、SMALLINT、MEDIUM_INT 更好MySQL

使用枚举或整数代替字符串类型MySQL

尽量使用 TIMESTAMP 而非 DATETIMEMySQL

单表不要有太多字段,建议在 20 以内MySQL

用整型来存 IPMySQL

索引设计

索引并不是越多越好,要根据查询有针对性的创建,考虑在 WHERE 和 ORDER BY 命令上涉及的列建立索引,可根据 EXPLAIN 来查看是否用了索引还是全表扫描MySQL

应尽量避免在 WHERE 子句中对字段进行 NULL 值判断,否则将导致引擎放弃使用索引而进行全表扫描MySQL

值分布很稀少的字段不适合建索引,例如 "性别" 这种只有两三个值的字段MySQL

字符字段只建前缀索引MySQL

字符字段最好不要做主键MySQL

不用外键,由程序保证约束MySQL

尽量不用 UNIQUE,由程序保证约束MySQL

使用多列索引时注意顺序和查询条件保持一致,同时删除不必要的单列索引MySQL

使用可存下数据的最小的数据类型MySQL ,整型 < date,time < char,varchar < blob*

使用简单的数据类型,整型比字符处理开销更小,因为字符串的比较更复杂MySQL 。如,int 类型存储时间类型,bigint 类型转 ip 函数。

使用合理的字段属性长度,固定长度的表会更快MySQL 。使用 enum、char 而不是 varchar。

尽可能使用 not null 定义字段MySQL

尽量少用 text,非用不可最好分表MySQL

查询频繁的列,在 where,group by,order by,on 从句中出现的列MySQL

where 条件中 <,<=,=,>,>=,between,in,以及 like 字符串 + 通配符(%)出现的列MySQL

长度小的列,索引字段越小越好,因为数据库的存储单位是页,一页中能存下的数据越多越好MySQL

离散度大(不同的值多)的列,放在联合索引前面MySQL 。查看离散度,通过统计不同的列值来实现,count 越大,离散程度越高。

本站内容来自用户投稿,如果侵犯了您的权利,请与我们联系删除。联系邮箱:835971066@qq.com

本文链接:http://lovochina.com/post/289.html