mysql数据库表设计的几个要点
1、表设计过程中应该注意的点:数据类型
1)更小的通常更好控制字节长度(长的会浪费内存)
2)使用合适的数据类型
例如:
1)增加status字段最好用tinyint(只占8个字节,所占的字节内存更小,更省空间),
2)char(1024)与varchar(1024)的对比:char就会指定1024个内存空间进行分配,varchar是可变长的,char用于定长数据存储会比varchar节省空间,例如:uuid(32)可以用char(32)
3) 尽量避免使用null 要使用not null default ’ ’ / not null default 0
null 的列会让索引统计和值比较都更复杂,可为null的列会占据更多的磁盘空间,在Mysql中也需要更多复杂的处理程序
2、索引设计过程中应该注意的点
1)选择唯一性索引
唯一性索引的值是唯一的,可以更快速的通过该索引来确定某条记录,保证物理上面唯一,唯一性索引效率最高
2)为经常需要排序、分组和联合操作的字段建立索引
经常需要ORDER BY、GROUP BY、DISTINCT和UNION等操作的字段,直接排序操作会浪费很多时间
3)常作为查询条件的字段建立索引
4)数据少的地方不必建立索引
索引很占内存,不能每个字段都加索引(例如:status字段,值很少如1,2,3,只能排出1/3的效率,浪费存储空间)
3、sql优化,用explain查数据库的执行计划
explain select * from score where user_id = 1;
注意:扫描行数(rows)会影响CPU运行,占用大量内存,当扫描行数特别多时要考虑是否需要重构sql
1)能用 between 不要用 in
2)能用 distinct 不要用 group by
3) 避免数据类型强转
select * from score where user_id = “1”;
(user_id是int类型,但传入的是string类型,虽然可以查询,但效率会很慢)