首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Mysql包含8列的索引

Mysql包含8列的索引
EN

Stack Overflow用户
提问于 2015-01-22 20:22:51
回答 1查看 17关注 0票数 0

我们有一个包含1,000,000条记录的表。此表具有8个字符串列的键-

代码语言:javascript
运行
复制
CREATE TABLE "Table" (
   "pk1" varchar(20) DEFAULT NULL,
   "pk2" varchar(20) DEFAULT NULL,
   "pk3" varchar(20) DEFAULT NULL,
   "pk4" varchar(20) DEFAULT NULL,
   "pk5" varchar(20) DEFAULT NULL,
   "pk6" varchar(20) DEFAULT NULL,
   "pk7" varchar(20) DEFAULT NULL,
   "pk8" varchar(20) DEFAULT NULL,
   "combined_pk" varchar(200) DEFAULT NULL,
   "more_data1" int(11) DEFAULT NULL,
   "more_data2" int(11) DEFAULT NULL,
   "more_data3" int(11) DEFAULT NULL,
   "more_data4" int(11) DEFAULT NULL,
   KEY "MainKey" ("pk1","pk2","pk3","pk4","pk5","pk6","pk7","pk8")
 ) ENGINE=InnoDB DEFAULT CHARSET=ascii

并不是所有的列都被填充,坦率地说,在大多数行中,只有3-4列是字段。

使用此键是为了防止表中相同键的重复。这不是唯一的/PK的原因是因为用户可以配置他可以接受复制。

该表80%为读取,20%为写入。

我知道复杂的复合索引可能效率低下。你认为创建一个新列更好吗?所有主键的列的串联(通过触发器提交),这个新列将被索引为varchar(200)?

或者干脆就这样放着不管?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2015-01-22 20:28:34

这篇评论太长了。

如果要在包含8列的索引和将相同数据放入单个列之间进行选择,那么就让索引保持原样!很难想象使用单列连接索引的查询会有多大用处。8列索引对于许多查询可能很有用。使用触发器和索引的更新/插入将比仅使用索引的更新/插入慢。

如果您试图确保这八个列没有重复项,则需要unique而不是key (允许重复的NULL值,因此这不是问题)。

如果您希望这8列成为复合主键,那么我建议将它们声明为NOT NULL,并发现将所有8列声明为主键。也就是说,我是自动递增整数主键的粉丝。如果您使用这样的主键,那么8列上的唯一索引就足够了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28088683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档