wadada 发表于 2017-11-9 09:35:44

mysql优化和索引

                      
[*]表的优化

1.定长与变长分离
    如 int,char(4),time核心且常用字段,建成定长,放在一张表;
    而varchar,text,blob这种变长字段适合单放一张表,用主键与核心表关联。
2.常用字段和不常用字段要分离
3.在 1 对多需要关联统计的字段上,添加冗余字段。


[*]列类型选择原则

1.字段类型优先级整型 > date,time > enum,char > varchar > blob,text
2.够用就行,不要慷慨,大的字段浪费内存,影响速度。
3.尽量避免用NULL,NULL不利于索引,需要特殊的字节来标注。


[*]Enum列的说明

1.enum列在内部是用整型来存储的
2.enum列和enum列想关联速度最快
3.enum列比(var)char的弱势--在碰到与char关联时,要转化,要花时间
4.优势---当char非常长时,enum依然是整型固定长度,当查询的数据量越大时。enum的优势越明显。



索引提高查询的速度、提高排序的速度、提高分组的速度


[*]聚簇索引和非聚簇索引

聚簇索引:btree
          innodb引擎,索引和数据是在一块的,
          innodb直接在主键索引的树中,储存行的数据,(既存储了主键值,又存储了行数据)。
          innodb次索引指向对主键的引用。
          优点:根据主键查询条目比较少时,不用回行(数据就在主键节点下)。
          缺点:如果碰到不规则数据插入时,造成频繁的页分裂。
非聚簇索引:btree
            myisam引擎, 索引和数据是分开的,
    myisam索引指向行在磁盘上的位置
            myisam中,主索引和次索引都指向物理行(磁盘位置)。

                  

页: [1]
查看完整版本: mysql优化和索引