MySQL:我应该如何起草这个数据库?

标签 mysql sql performance

我正在为高流量论坛设计一个插件。我正在做的是使用搜索 API 列出相关主题,每天最多搜索 800 次

我想做的是创建一个数据库来存储结果,将它们缓存一天以便使用它而不是 API。

这样的表格布局是否最佳:

Table:
+---------+-----------+------------+
| threadid | relatedids | dateentered |
+---------+-----------+------------+
|   129314 |  1124;2144 | 1234567890  |
|   124129 |  1251;1241 | 1234567890  |
|   185292 |  1151;5125 | 1234567890  |
+----------+-----------+-----------+

相关的 url 也是线程 ID,以冒号分隔。我不是 SQL 方面的专家,所以我不知道将索引设置为 threadID 是个好主意,还是什么!

最佳答案

你显然在这里有一个一对多的关系,所以你应该使用 2 个表而不是分隔符,类似于(MySQL 语法,假设还有一个名为 thread 的表):

create table search_thread (
   thread_id int,
   date_entered datetime,
   PRIMARY KEY (thread_id)
   FOREIGN KEY (thread_id) REFERENCES thread(thread_id));

create table search_results (
   thread_id int,
   result_id int,
   PRIMARY KEY (thread_id, result_id),
   FOREIGN KEY (thread_id) REFERENCES search_thread(thread_id),
   FOREIGN KEY (thread_id) REFERENCES thread(thread_id).
   FOREIGN KEY (result_id) REFERENCES thread(thread_id));

此模型的好处是它可以扩展,这意味着您可以添加特定于相关线程的属性。此外,您可以执行一些您的方法无法实现的查询,例如查找有多少线程与另一个线程相关(在两个方向上)。

关于MySQL:我应该如何起草这个数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3648923/

相关文章:

mysql - 如何减慢我的查询速度

android - Android 中的电源配置文件

java - sql distinct什么时候比java编程快 'distinct'

mysql - 获取MySQL结果集+基于关闭计算的LIMIT

sql - 优化 PostgreSQL 以进行快速测试

PHP MYSQL CONCAT,字符串开头包含逗号

java - Java 的 JDBC 示例

c++ - 给定一个范围,我必须计算数组中数字的频率。给定的解决方案是否有效?

php - MySQL查找重复匹配条件的用户

php - 保存 bean 是否会删除记录与 SuiteCRM 中电子邮件的连接?