mysql - 创建具有约 6 列复合键的表有何含义?

标签 mysql indexing

我正在创建一个表,该表将具有一个由大约 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_1col_2 的查询将被完全索引(索引被实现为 B 树或某种类似的结构)。但是使用 col_1col_3 的查询将仅使用索引来查找 col_1,但随后必须按顺序扫描所有这些行来测试col_3

关于mysql - 创建具有约 6 列复合键的表有何含义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28510247/

相关文章:

c# - 将硬编码数据传输到数组

php - 将字段添加到我的模块的类中,不起作用

mysql - 选择查询中有特定的单词记录

mysql - InvalidArgument= '11209485' 的值对于 'index' 无效。参数名称 : index error when running SQL query in VB. NET

python - 为什么在设置索引更快时使用 reset_index(drop=True)?

python - 根据条件保留 pandas 数据框的前 n 行

python - Pandas :使用 ix 索引超出范围,但我可以看到该列

arrays - 展平 Lua 中的嵌套列表

mysql - 如何计算(SQL)中的行数?

mysql - 如何编写包含多个 LIKE 子句的查询?