MySQL优化

单表优化

字段

  • 尽量使用TINYINTSMALLINTMEDIUM_INT作为整数类型而非INT,如果非负则加上UNSIGNED
  • 尽量使用TIMESTAMP而非DATETIME
  • 避免使用NULL字段,很难查询优化且占用额外索引空间
  • 用整型来存IP

索引

  • 针对性的创建索引,考虑在WHERE和ORDER BY命令上涉及的列建立索引,可根据EXPLAIN来查看是否用了索引还是全表扫描
  • 尽量避免在WHERE子句中对字段进行NULL值判断,否则将导致引擎放弃使用索引而进行全表扫描
  • 字符字段只建前缀索引

查询

  • 不用SELECT *
  • OR改写成INOR的效率是n级别,IN的效率是log(n)级别,in的个数建议控制在200以内
  • 连续数值,使用BETWEEN不用 IN

表分区

水平、垂直拆分

三大范式

第一范式

要求属性具有原子性,不可再分解

第二范式

要求记录有唯一性,即不存在部分依赖,非主键字段必须依赖主键

第三范式

要求字段没有冗余,任何字段不能由其他字段派生出来,即不存在传递依赖

删除表命令

delete

清除表所有数据,但保留表的结构;不释放所占空间。可以回滚。

drop

清除所有表数据,删除表的结构,释放所占空间。

truncate

清除表所有数据,但保留表的结构;释放所占空间。