【问题标题】:MySQL record existence optimizationMySQL记录存在优化
【发布时间】:2010-08-19 08:35:03
【问题描述】:

以 StackOverflow 之类的网站为例:

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

userID (int 8)
questionID (int 8)

在显示热门问题列表时,我试图标记登录用户提出的问题。 检查每个问题是否存在用户-问题映射更有效,还是从数据库中获取登录用户的所有用户-问题映射,然后在服务器端进行检查?

这是我想看到的输出的视觉示例:

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

【问题讨论】:

  • 您的问题/问题到底是什么?
  • 我已编辑以粗体显示确切的问题。

标签: sql mysql database optimization


【解决方案1】:

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

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 标记应用程序以显示“(您问这个)”。

【讨论】:

  • 加一个,因为这是个好主意。话又说回来,如果用户问题映射在不同的表中,情况就完全不同了
  • @Michael Clerx:嗯,如果是这样的话,只需加入即可。
  • 感谢您的回答!但是,用户问题映射在不同的表中,那我该怎么做呢?
猜你喜欢
  • 2012-09-19
  • 1970-01-01
  • 2015-11-10
  • 2011-10-16
  • 1970-01-01
  • 2012-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多