创建没有聚集索引的mysql主键?
我是一个SQL Server的家伙,正在为一个即将到来的大型项目试验MySQL(由于许可),在创建没有聚集索引的主键的过程中,我找不到太多信息。我在5.1上读到的所有文档都说,主键会自动获得聚集索引。因为我对主键列(GUID)使用二进制(16),所以我不希望在它上面有聚集索引。所以创建没有聚集索引的mysql主键?,sql,mysql,indexing,Sql,Mysql,Indexing,我是一个SQL Server的家伙,正在为一个即将到来的大型项目试验MySQL(由于许可),在创建没有聚集索引的主键的过程中,我找不到太多信息。我在5.1上读到的所有文档都说,主键会自动获得聚集索引。因为我对主键列(GUID)使用二进制(16),所以我不希望在它上面有聚集索引。所以 是否可以在没有聚集索引的情况下创建主键?我可以将聚集索引放在date_created列上,但是如何防止mysql自动在主键上创建聚集索引呢 如果不可能,在GUID列上有一个唯一的索引,而在表上没有主键,我的性能是否正
这取决于您使用的存储引擎。MyISAM表不支持聚集索引,因此MyISAM表上的主键不进行聚集。但是,InnoDB表上的主键是集群的 您应该进一步了解每个存储引擎的优缺点
你需要有一个主键;如果你不自己创建一个,MySQL会为你创建一个隐藏的。您总是可以为主键创建一个自动增量字段(我认为这比MySQL在表中有隐藏字段更好)。考虑到上面所说的,似乎您无法真正定义在哪个列上设置聚集索引:
- 要么在PK列上
- 或者在第一列上使用唯一索引,该索引仅具有非空值
- 或者在某个内部专栏上--在您的案例中没有那么有用^^
某种黑客可能是:
- 不定义主键
- 在您的date_created字段上放置一个唯一的索引(如果您在短时间内没有创建太多行,它可能是可行的…)
不确定这会对聚集索引有多大影响;但也许值得一试