MySQL记录存在优化

时间:2010-08-19 00:13:10

标签: sql mysql database optimization

使用像StackOverflow这样的网站作为例子:

我有一个用户,问题和用户问题映射表。我的用户问题映射表如下所示:

userID (int 8)
questionID (int 8)

当显示热门问题列表时,我正在尝试标记已登录用户提出的问题。 检查每个问题是否存在用户问题映射,或者从数据库中获取登录用户的所有用户问题映射是否更有效,并在服务器端进行检查?< / b>

以下是我想看到的输出的可视示例:

  

问题1:什么? (你问过这个)
  问题2:谁?   问题3:为什么? (你问过这个)

1 个答案:

答案 0 :(得分:3)

演示文稿应始终留在表示层。如果在数据库中构建,基于您提到的业务规则的表示逻辑会更快:

SELECT q.title,
       CASE 
         WHEN uq.who_asked = @user_id THEN 1 
         ELSE 0 
       END AS isYourQuestion
  FROM QUESTIONS q
  JOIN USER_QUESTIONS uq ON uq.question_id = q.question_id

然后,如果值为1,您可以使用isYourQuestion标记应用程序以显示“(您问过这个)”。