1.表的优化和列类型选择
表的优化
1,定长和变长分离
2,常用字段和不常用字段分离(不常用字段单独建表)
3,添加冗余字段提高查询(反范式查询(数据统计))
列类型选择
1,字段类型选择优先级
整形 > date, time(定长) > enum(枚举,内部用整形存储), char(定长,考虑字符集和校对集) > varchar > blob,text (int直接排序,字符串需要按照类型和校对规则排序,所以慢)
2,够用就行(大的字段浪费内存,影响速度)
3,尽量避免选择NULL(不利于索引优化,用特殊的字节来标注)
2,索引优化部分 (增加查询速度,排序速度,分组速度)
1,索引类型
1,btree索引(范围查询方便)
二分算法(tree)
2,hash索引(hash快,但是有使用限制,hash算法),只能在memory表使用,hash更快
1,存储数据不规律
2,无法对范围查询进行优化(hash没有规律)
3,无法对字段前缀进行优化
4,排序无法优化
3,btree 索引常年误区(给常用字段全部加索引,独立索引同时只能使用一个,使用联合索引提升效率)
多列加索引时遵循左前缀原则,同时存在多个索引时,索引满足原理是一个一个从左向右满足,最左边不存在时,索引不使用
explain来分析mysql 语句看语句用的索引
3-1: 聚簇索引(innodb) 和 非聚簇索引(myisam)
非聚簇索引(myisam):分文件存储 数据文件./ 索引文件 -》 指向行在磁盘上的位置
聚簇索引(innodb) =》指向一个对主键的引用(数据在叶子底下)
乱序插入数据时,会分裂叶子,导致mysql运行速度比顺序插入慢,取数据时还是按照顺序返回
是是