为一所小学制作学生的联系地址,
将字段[学生姓名],[家长姓名],[地址],[邮政编码],[电话号码]制作成一个数据表格。
先对这个表格进行如下操作,请问这些操作在系统上有什么隐患,问题及注意点。
1.为了要从[学生姓名]查询[电话号码],现将[学生姓名]和[电话号码]做成索引INDEX
回答:1) 为了查[电话号码],没有必要将[电话号码]也做成索引,而且也可以生不必要的空间
2) [学生姓名]有可能出现重复
3) 电话号码可能不存在
.....
2.[年级]和[班]忘记了,现追加这两列,并将这两列做成唯一索引UNIQUE INDEX
回答:1) 追加时要有唯一ID或者保证表的记录数没有变化
.....
3.为了从[邮政编码]做成对应的学生列表,现将[邮政编码]做成INDEX
.....·(是不是用group by更合适啊??)
以上还有哪些问题需要指出啊??
SQL?面试?注意点
------解决方案--------------------
1.为了要从[学生姓名]查询[电话号码],现将[学生姓名]和[电话号码]做成索引INDEX
回答:1) 为了查[电话号码],没有必要将[电话号码]也做成索引,而且也可以生不必要的空间
如果没有聚集索引或者覆盖索引,那电话号码会造成扫描操作
2) [学生姓名]有可能出现重复
重复很正常,但是一般的系统都不会用人名作为主键,一般会有学号
3) 电话号码可能不存在
没有就加上默认值
.....
2.[年级]和[班]忘记了,现追加这两列,并将这两列做成唯一索引UNIQUE INDEX
回答:1) 追加时要有唯一ID或者保证表的记录数没有变化
这个貌似没必要吧
.....
3.为了从[邮政编码]做成对应的学生列表,现将[邮政编码]做成INDEX
.....·(是不是用group by更合适啊??)
邮编由于选择性比较高,可以作为索引
------解决方案--------------------
第1和2个问题回答得很好,第3个问题不知道面试官是要干嘛,邮政编码不需要做索引啊
------解决方案--------------------
问题2中,好像这两列无法做成唯一索引UNIQUE INDEX吧。因为多个学生会在同一[年级]和[班]。
------解决方案--------------------
第三个问题我觉得是没有必要在邮政编码上建立索引的。因为关系数据库采用的是页式存储数据,建立索引就是方便寻找数据,一般都是在具有唯一性的字段上建立索引。而像邮政编码这样的字段很多都是重复冗余的,没必要。你查的时候也会加where条件,查一个区域的都是很快的。