高性能mysql-翻阅笔记

高性能mysql-翻阅笔记

高性能mysql–阅读笔记

一、数据类型

索引列尽量不用NULL

实数

浮点类型(float(4字节)、double(8字节))和decimal类型(转为double计算)

cpu可以直接计算浮点类型,但不能计算decimal类型

每4个字节保存9个数字,小数点1个字节

varchar(N)存储长度: N+额外长度(1字节n<=255,2字节n>255)

          更新时若原位置不适合新长度:myisam 拆分行,innodb分页保存

     memory引擎char与varchar都是定长保存

     N越小,排序效率越高,内存表(都是定长)空间越小

blob、text类型

    排序仅适用max_sort_length规定的前N个字节进行排序

enum –不建议使用

    变为整数进行保存,空间小

    缺点:需要进行额外转换才能显示字符串,

          添加/删除enum集时需要alter table

          比较时转为字符串进行比较

日期

    datetime:8字节、时区无关,1001-9999年

    timestamp:4字节、保存1970.1.1以来的秒数,依赖于时区,1970-2038

               
当用bigint保存,则范围会变更大(目前不支持)

二、索引

结构

   通常都是B+Tree,但NDB Cluster内部使用T-Tree,特点:

       数据存储有序

       叶子节点包含指向下一个节点的联接

       适合全键值、键值范围、键前缀查找(大字符串索引)

存储方式

   MYISAM 前缀压缩,引用行的物理位置(当行位置变更时需要更新索引)

   INNODB 不压缩,引用主键值(只要主键不变,即使位置变了也不需要更新索引)

       如果索引列中没有主键,主键仍会保存在索引中

       如果索引中已包含主键,则不会重复保存,只保存索引列中未使用的主键

     
建议:定义索引时最后把主键带上,因为server层并不知道索引中含主键

使用

   用联合索引(a,b,c)进行order by时,要保持采用同样的升/降序,例如

    ORDER BY a ASC,b ASC,c ASC或者    ORDER BY a DESC,b DESC,c DESC

   如果混用,索引不会生效

高性能mysql-翻阅笔记

相关文章:

你感兴趣的文章:

标签云: