日期:2014-05-18 浏览次数:20451 次
问题1 select * from dear where 姓名 = '你' 问题2 select name.* , dear.名称 from name,dear where name ='你' and name.编号 = dear.编号 问题3:比较前2个问题的执行效率 肯定是第一个效率高,因为第二个要联合两表查询.
------解决方案--------------------
问题一会快,但是关系数据库就是靠关系来消除隆余的.问题2省空间,是一般的使用方法.
------解决方案--------------------
海量数据的情况下,应该第一种的效率高。
单从效率考虑,将昵称串接放在一起,如:
王 10 a
王 10 c -〉王 10 a,c,d
王 10 d
虽然增加了昵称字段长度的开销,但减少记录数(相对增加长度的开销,可能还有赚),无疑检索更快。
------解决方案--------------------
方法,最简单最有效就是直接select
问题1
在Name列建索引
create index 索引名 on 表(Name)
问题2:
建组合索引(Name,编号)
create index 索引名 on 表(Name,编号)
-----
------解决方案--------------------
看你的表格之后发觉大家都被你的取名所误导了,
表中的编号仅仅是指姓的编号,所以编号和姓是一对一的。
表一表三中的名称就是指名,合起来就是一个姓下面有多少名,
所以表一和表三的复杂度一致,
都可以用编号+名字组成PK的。
建议直接丢弃编号栏位,
因为我觉得仅仅姓使用编号,名没有使用编号没有什么意义。
------解决方案--------------------
我智商低了点,没看出来,接点分好了,hehe
------解决方案--------------------
在只有一两个字段的情况下, 分表的好处根本就显现不出来的。
------解决方案--------------------
个人更倾向于昨夜小楼的做法,
问题一:冗余度大。
二:查询效率问题。
三:不是很了解。
但是根据现在的情况来说,能从空间换取时间,从成本的角度考虑,冗余度不是大问题的。
当然表大到KG的情况,那我的说法就被推翻了。
------解决方案--------------------
问是一只满足第二范式,问题二满足第三范式。数据量较大建议分表处理。