创建一个没有聚集索引的mysql主键?
问题描述:
我是一个试验MySQL的SQL Server小伙,对于即将到来的大型项目(由于授权),我没有找到很多没有聚集索引的创建主键的信息。我读过的所有文档都在5.1中说过,主键会自动给出一个聚集索引。由于我使用主键列(GUID)的二进制(16),我宁愿没有聚集索引。所以...创建一个没有聚集索引的mysql主键?
- 是否有可能创建一个没有聚集索引的主键?我总是可以将聚集索引放在date_created列上,但是如何防止mysql自动在主键上创建聚集索引?
- 如果不行,我可以在GUID列上使用唯一索引并且在表上没有主键的情况下性能良好吗?我打算在这里使用nhibernate,所以我不确定是否允许没有主键(还没有那么远)。
答
考虑什么是对13.6.10.1. Clustered and Secondary Indexes说,看来你真的不能确定哪个列聚集索引设置:
- 它无论是在PK列
- 或具有唯一索引的第一列只有具有非空值
- 或一些内部列 - 在没有你的情况^^
关于在文章的第二个问题是有用的:无PK该表和GUID上的UNIQUE索引;这可能是可能的,但它不会改变聚集索引的任何内容:它仍然可能在GUID列上。
某种黑客攻击的可能是:
- 没有定义主键
- 地方唯一索引您DATE_CREATED场(如果你不创造短期内过多的行的时间,也可能是可行的......)
不知道你可以放置一个第二唯一索引的GUID ...也许^^
而且不知道这会改变很多关于这些CLU指标索引;但可能值得一试...
答
这取决于您正在使用哪种存储引擎。 MyISAM表不支持聚簇索引,因此MyISAM表上的主键未聚集。然而,InnoDB表上的主键是集群化的。
你应该consult the MySQL Manual关于每个存储引擎的优点和缺点的更多细节。
您需要有一个主键;如果你自己没有创建一个,MySQL会为你创建一个隐藏的。你总是可以为主键创建一个AUTO_INCREMENT字段(我认为这比让MySQL中的表隐藏字段更好)。