1,索引:
索引长度计算单位为字节。
varchar等长度计算为字符。
create index cityname on city(city(10));前缀索引
索引原则:
1,高离散度
2,用段索引,如:char(200) -> char(10)
3,多列索引的最左前缀
4,不过度索引:1,影响数据变更;2:影响查询计划
5,InnoDb普通索引都会保存主键的值,所以主键尽量简短
2,外键:
参考url:http://www.cnblogs.com/fuland/p/4280434.html
自己的结论:
1,数据库设计时添加外键,否则无法完成建模。但建库和同步操作,忽略外键sql。针对正方观点2、3,反方观点2。
2,根据ER图中已有的外键,指导开发人员在程序层添加数据一致性与完整性校验。针对正方观点1,反方观点1
3,根据ER图中已有的外键,提示开发人员根据实际业务在从表外键列添加普通索引或唯一索引。外键是业务抽离出来的约束,并且符合大多数程序查询规则,具有指导意义。因为innodb具有插入缓冲特性,正常情况下对增删改性能影响有限。针对反方观点3,大表插入需单独处理,如关闭外键约束等。
4,90%情况下主键是不会修改的,没有外键约束或程序控制不完整情况下,从表会产生垃圾数据,但对安全性影响不大(可能对部分统计sql有影响),后期可以根据ER图进行shell定时任务空闲时间进行数据定期清理。