【发布时间】:2021-11-26 14:01:05
【问题描述】:
我有以下 MySQL 表:
CREATE TABLE example (
id INT AUTO_INCREMENT NOT NULL,
node0 SMALLINT DEFAULT 0 NOT NULL,
node1 SMALLINT DEFAULT 0 NOT NULL,
node2 SMALLINT DEFAULT 0 NOT NULL,
node3 SMALLINT DEFAULT 0 NOT NULL,
version SMALLINT DEFAULT 1 NOT NULL,
user_id INT DEFAULT NULL,
score INT DEFAULT 0 NOT NULL,
datetime BIGINT NOT NULL,
INDEX IDX_22B017FAA76ED395 (user_id), PRIMARY KEY(id)
)
ALTER TABLE example ADD CONSTRAINT FK_22B017FAA76ED395 FOREIGN KEY (user_id) REFERENCES user (id);
该表将非常大(-ish)(几百万个条目),我想知道为性能索引列的最佳方法是什么。
主要会查询该表以获取所有匹配的行:
- node0 值
- node1 值
- node2 值
- node3 值
- 版本值
... 使用 Join 语句获取关联用户(user_id 字段)
这些字段(node0、node1、node2、node3、version)可以形成一个键(没有两行可以对所有这些字段具有相同的值),但我想将 ID 保留为自动增量键,所以我可以订购它们。
我应该为这些字段添加辅助键吗?还是将它们设为主键并将 ID 作为辅助键?和/或添加单个索引?
【问题讨论】:
-
我们确实需要查看您希望在此处运行的所有查询。
-
索引字段(node0、node1、node2、node3、版本)
-
通过“所有行匹配”,您的意思是您正在针对常量测试所有 5 列吗?如果是这样,请参阅 OJones 的回答。否则,请提供有关查询外观的更多详细信息。
标签: mysql indexing query-optimization