我们有一个web项目,有一些选择题和注册用户回答他们...
我想找到两个用户的共同答案给予一个对比。我的意思是,登录的用户会去一些其他用户的个人资料页面,看看他们的答案只有他们共同的问题比较...什么是在表中找到共同行的最佳方式
中的表像(简体):
问题
ID
问题
活性 - >枚举( 'Y', 'N')
答案
ID
question_id
答案
用户
ID
缺口
user_answers
USER_ID
question_id
answer_id
私人 - >枚举( 'Y', 'N')
我可以通过给别名加入user_answers表,但我也必须加入其他表。不应该考虑私人答案,只应该采取积极的问题...
该网站预计会得到一些负载,所以恐怕有太多的联接和条件。根据我的经验,我知道这些复杂的查询可以锁定表格并导致一些严重的性能问题,尤其是在重负载下...
那么考虑到可伸缩性和性能时最佳做法是什么...... 会smt。像狮身人面像或太阳能帮助,或任何基于软件的解决方案来做比较?
结果将由方式进行分页...
现在我想问题分隔条件的细节,并回答细节并缓存,所以查询将是SMT。像:
select ua1.answer_id as her_answer_id,
ua2.answer_id as my_answer_id,
ua1.question_id
from user_answers ua1
inner join users_answers ua2 on ua1.question_id=ua2.question_id
where ua1.user_id=$herId
and ua2.user_id=$myId
and ua1.private='N'
order by ua1.question_id desc
questions.question和answers.answer会从缓存中取......在这种情况下被动的问题将是一个问题,但我想我会尝试移动被动的问题哟一些备份的数据库,将复杂的事情......
正如一个侧面说明,你要Y'的'枚举和'N'时,你可以有一个'BIT'代替,让你有'TRUE '和'FALSE'。只是一个想法。 – corsiKa 2011-03-07 22:28:50
'answer.id'是主键吗?或每个问题唯一? – 2011-03-08 01:55:36
@glowcoder:旧习惯... MySQL 5.0.5中为InnoDB添加了BIT支持,因此ENUM更快,所以我仍然继续使用ENUM,但我会考虑它,谢谢... – madpoet 2011-03-08 21:42:56