我們有一個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