Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建没有聚集索引的mysql主键?_Sql_Mysql_Indexing - Fatal编程技术网

创建没有聚集索引的mysql主键?

创建没有聚集索引的mysql主键?,sql,mysql,indexing,Sql,Mysql,Indexing,我是一个SQL Server的家伙,正在为一个即将到来的大型项目试验MySQL(由于许可),在创建没有聚集索引的主键的过程中,我找不到太多信息。我在5.1上读到的所有文档都说,主键会自动获得聚集索引。因为我对主键列(GUID)使用二进制(16),所以我不希望在它上面有聚集索引。所以 是否可以在没有聚集索引的情况下创建主键?我可以将聚集索引放在date_created列上,但是如何防止mysql自动在主键上创建聚集索引呢 如果不可能,在GUID列上有一个唯一的索引,而在表上没有主键,我的性能是否正

我是一个SQL Server的家伙,正在为一个即将到来的大型项目试验MySQL(由于许可),在创建没有聚集索引的主键的过程中,我找不到太多信息。我在5.1上读到的所有文档都说,主键会自动获得聚集索引。因为我对主键列(GUID)使用二进制(16),所以我不希望在它上面有聚集索引。所以

  • 是否可以在没有聚集索引的情况下创建主键?我可以将聚集索引放在date_created列上,但是如何防止mysql自动在主键上创建聚集索引呢
  • 如果不可能,在GUID列上有一个唯一的索引,而在表上没有主键,我的性能是否正常?我计划在这里使用nhibernate,所以我不确定是否允许没有主键(还没有到那个程度)

  • 这取决于您使用的存储引擎。MyISAM表不支持聚集索引,因此MyISAM表上的主键不进行聚集。但是,InnoDB表上的主键是集群的

    您应该进一步了解每个存储引擎的优缺点


    你需要有一个主键;如果你不自己创建一个,MySQL会为你创建一个隐藏的。您总是可以为主键创建一个自动增量字段(我认为这比MySQL在表中有隐藏字段更好)。

    考虑到上面所说的,似乎您无法真正定义在哪个列上设置聚集索引:

    • 要么在PK列上
    • 或者在第一列上使用唯一索引,该索引仅具有非空值
    • 或者在某个内部专栏上--在您的案例中没有那么有用^^
    关于你文章中的第二个问题:表上没有PK,GUID上有唯一索引;这是可能的,但它不会改变聚集索引的任何内容:它可能仍然位于GUID列上


    某种黑客可能是:

    • 不定义主键
    • 在您的date_created字段上放置一个唯一的索引(如果您在短时间内没有创建太多行,它可能是可行的…)
    不确定是否可以在GUID上放置第二个唯一索引。。。也许吧^^
    不确定这会对聚集索引有多大影响;但也许值得一试