深入理解mysql

来源:互联网 发布:html 文字游戏源码 编辑:程序博客网 时间:2024/05/23 10:55

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运行速度比顺序插入慢,取数据时还是按照顺序返回



是是