mysql - 如何将索引添加到 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;
它似乎没有那么有效,因为我必须在每个查询上对表进行分组。由于我不熟悉数据库,我想知道这是否是设计数据库的好方法。我必须添加一些索引吗?我应该如何编写选择查询以使其有效?
解决方案
推荐阅读
- c# - 尝试获取资源时出现 Blazor WASM NetworkError。“CORS 缺少允许来源”
- python - Selenium 的 find_elements_by_class_name 不起作用,我不明白为什么
- powershell - PowerShell 脚本无法启动(随机)
- github - TortiouseSVN 使用 SSH 连接到 github.com
- terraform - terraform 12-使用数据源查询安全组
- ruby-on-rails - Rails 6 安全 cookie 问题
- python - 使用 BotFramework 任务模块在 msteams 上渲染嵌入式 iFrame YouTube 视频问题
- sql - Oracle SQL 选择一个表列的最终值,例如从包含值负 1 位的其他表列中的值
- javascript - 在 Javascript 中进行声明时是否分配了内存?
- mongodb - 使用 go mongo 驱动程序进行基本组聚合