1.基础概念
1.1.存储引擎
MyISAM
- 不支持事务,不支持外键,访问速度快
- 每张表由3个文件构成照(存储表定义文件,数据存储文件,索引文件)
- 支持3种存储格式(默认为静态表,会自动将把保存的内容的空格去除)
InnoDB
- 外键绑定功能
- 提供事务能力
其他
MEMORY,MERGE,TokuDB
1.2.数据类型的选择
varchar,text,blob
- text,blob可以存储大文本,但是若存在大量删除该字段的情况时,最好定时采用optimize命令优化表结构
- text,blob的精确匹配性能的提升可以采用Synthetic索引方案来实现(即对text字段进行md5哈希散列,每次用md5值去查),进一步,对于前缀索引,即:xxx%,的搜索,可以通过对text中前n个字段进行索引创建来提高效率——8.2节
浮点数与定点数
选定点数decimal
DATETIME和TIMESTAMP
DATETIME适用于较长时间范围
TIMESTAMP适用于需要区分时期的情况,他会自动换算时区(最长时间为2038年。。。)
1.3.字符集
合适的字符集选取可以减少数据量,从而减少磁盘IO,提升查询速度。
字符集-character
对于纯中文汉字的数据库应该采用GBK字符集(汉字,英文都是2字节),而含有英文的数据库则应采用UTF-8字符集(汉字3字节,英文1字节)
校对规则-collation
一个字符集可以有多个校对规则,校对规则是用了比较字符串的,即在select的时候,判断where条件中的字符串是否和数据库数据相等,比如忽略大小写的校对规则等等。