首页 > 解决方案 > 如何将索引添加到 mysql 数据库以提高性能?

问题描述

我正在开发一个在多个集群上同步内容的项目。我想使用两个程序来完成这项任务。一个程序定期更新每个集群上内容的存在状态,当一个内容不在所有集群上时,另一个程序进行内容复制。

数据库表按以下方式设计。

table contents -- stores content information.
+----+----------+
| id |  name    |
+----+----------+
|  1 | content_1|
|  2 | content_2|
|  3 | content_3|
+----+----------+

table clusters -- stores cluster information
+----+----------+
| id |  name    |
+----+----------+
|  1 | cluster_1|
|  2 | cluster_2|
+----+----------+

table content_cluster -- each record indicates that one content is on one cluster
+----------+----------+-------------------+
|content_id|cluster_id|   last_update_date|
+----------+----------+-------------------+
|        1 |        1 |2020-10-01T11:30:00|
|        2 |        2 |2020-10-01T11:30:00|
|        3 |        1 |2020-10-01T10:30:00|
|        3 |        2 |2020-10-01T10:30:00|
+----------+----------+-------------------+

第一个程序定期更新这些表(一小部分可能会改变,大部分表保持不变)。第二个程序迭代地获取一个不在所有集群上的内容记录。选择查询如下。

SELECT content_id
FROM content_cluster
GROUP BY content_id
HAVING COUNT(cluster_id) < <cluster_number>
LIMIT 1;

它似乎没有那么有效,因为我必须在每个查询上对表进行分组。由于我不熟悉数据库,我想知道这是否是设计数据库的好方法。我必须添加一些索引吗?我应该如何编写选择查询以使其有效?

标签: mysqlsql

解决方案


推荐阅读