我正在创建一个表,该表将具有一个由大约 6 列组成的复合键。在某些查询中,我不会使用全部 6 列。如果我这样创建架构,性能是否会显着下降?
create table my_table (
id int not null,
col_1 char(30),
col_2 char(30),
col_3 char(30),
col_4 int(11),
col_5 int(11),
col_6 char(30),
CONSTRAINT constraint_name PRIMARY KEY (col_1,col_2,col_3,col_4,col_5,col_6)
);
// Example query that doesn't use all the columns
select * from my_table where col_1="hello" and col_2="world";
最佳答案
唯一显着的影响是索引将占用更多的磁盘和内存空间。
使用键前缀中的所有列的查询将能够利用索引。因此,使用 col_1
和 col_2
的查询将被完全索引(索引被实现为 B 树或某种类似的结构)。但是使用 col_1
和 col_3
的查询将仅使用索引来查找 col_1
,但随后必须按顺序扫描所有这些行来测试col_3
。
关于mysql - 创建具有约 6 列复合键的表有何含义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28510247/