面试的时候说自己做j2ee网站时候和项目经理一起设计过表?
然后对面的面试官像机枪子弹一样的问题过来了?
- 你知道数据库设计三大原则吗?(当时说,原子性,不可传递?)
- 你知道mysql数据引擎吗?(当时说,有好几个吧!然后说的常用的两个innodb和asm, 尴尬?, 明明是MyIsam)
- 你知道怎么选择数据引擎吗?(innodb支持事物,myisam不支持事物)
- 你知道索引吗?(当时说, 好像有聚簇索引和非聚簇索引)
当时问了这几个问题后,就完全懵逼了, 面试后肯定是gg了.
其实平时设计过程中知不知道这些, 其实是知道的, 或者说有些是忽略的.如果你说我能建表,性能什么的见鬼去吧!这样也没错. 但是如果想要发挥性能的极致, 不去了解你根本就不知道可以这样做?为什么这么做?
回顾一下平时设计思路?很多种(小公司职员?,用的比较少)
- 会不会有事物? 有,那就只能是innodb, 一般网站设计中没有事物的真的少得可怜 ,所以除了看书,帖子,资料很少其他渠道知道 (很明显这一种就让很多很多后续设想胎死腹中)
- 在项目创建初期,可能很少用到索引,因为数据量很少, 很多时候数据库优化是db的事情(这里又说明我是小公司的码农,血的教训) , 所以对索引的了解 , 基本都忘记了. 但是说道索引不得不提的就是主键,唯一键,他们会自动生成unique index, 在来看看单列/复合索引现在看来是一个前期必备的设计条件呢?我觉得应该是, 复合索引在多条件查询的时候顺序很重要, 所以最初的时候应该定一个下来
- 字段设计, 使用什么类型的字段, 是定长还是可变类型, 字段长度多少才能满足. 可以问问自己设计的时候真的想过吗? 也许想过, 但是可能想的时间不够多, 比如数值 是int?还是bigint, 是varchar还是char.
也许在程序员的世界里应该多问问几个为什么,多多的深度挖掘才是提升自己的唯一捷径?
然后在找了下资料,就光这三个问题, 面试起码都可以说一个小时!