mysql - 如何有效查询 "latest questions"?

标签 mysql database-design innodb

我的应用程序中有 3 个实体:user , tag , question .

这些实体之间的关系:

  1. user可以选择tag他们感兴趣的是
  2. tag可以附加到question s

这或多或少类似于 stackoverflow 中对应实体之间的关系或quora .

现在我正在尝试添加一个名为“最新问题”的页面,我将在其中呈现一些带有访问用户感兴趣的标签的最新问题。

如何有效地实现这一点?

假设访问用户是 userA 。 我现在能想到的解决方案是:

  1. 获取所有标签userA对某个关联表感兴趣
  2. 做一个IN针对 question_tag 的查询获取相关表question_id s
  3. 查找question_id位于 question表并按 time desc 对结果进行排序

所以有两个 IN在这里查询,自数量tag某个用户的 s 可能非常大(可能数千),恐怕这个解决方案不够快。

我正在考虑对多个标签进行编码并将结果放入 question 的列中表,有哪些好的方法可以做到这一点?

最佳答案

您需要向该列表添加一个时间戳字段,然后仅获取按带有限制的时间戳排序的列表。假设 SQL:

select question from listofquestions 
    order by whenitwasasked desc limit 5

关于mysql - 如何有效查询 "latest questions"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16599630/

相关文章:

php - 如何用mysql数据填充html组合框

mysql - 将 Money 持久化到数据库中。设计决策

mysql - 优化 MYSQL 查询(InnoDB 表)

mysql - 将表从 InnoDB 转换为 MyISAM 的问题(只能有一个自动列,并且必须将其定义为键)

mysql - 如何在无法复制的两个不同独立网络之间同步具有相同名称和数据库名称的特定表?

php - 我可以将 WordPress 插件连接到多个 mysql 数据库吗?

sql-server - 数据库设计 - COUNTRY、CURRENCY int 或 varchar 的主键

mysql - 这种情况我必须使用外键的哪一种方式??

mysql - MySQL innoDB 更新缓慢(无知)

php - 在 'country_id' 子句中获取列 'where' 是不明确的 - cakephp 1.3 中的搜索查询错误