簡體   English   中英

創建沒有聚集索引的mysql主鍵?

[英]Create a mysql primary key without a clustered index?

我是一個SQL Server人,正在嘗試使用MySQL來處理即將到來的大型項目(由於許可),而且我沒有找到很多信息來創建沒有聚簇索引的主鍵。 我在5.1上讀到的所有文檔都說主鍵自動被賦予聚簇索引。 由於我使用二進制(16)作為主鍵列(GUID),我寧願沒有聚集索引。 所以...

  1. 是否可以創建沒有聚簇索引的主鍵? 我總是可以將聚集索引放在date_created列上,但是如何防止mysql自動在主鍵上創建聚簇索引?
  2. 如果不可能,我是否可以在GUID列上使用唯一索引並且表中沒有主鍵? 我打算在這里使用nhibernate,所以我不確定是否允許沒有主鍵(還沒有那么遠)。

這取決於您使用的存儲引擎。 MyISAM表不支持聚簇索引,因此MyISAM表上的主鍵不會聚集。 但是,InnoDB表上的主鍵是群集的。

有關每個存儲引擎的優缺點的更多詳細信息, 請參閱MySQL手冊

你需要一個主鍵; 如果您不自己創建一個,MySQL將為您創建一個隱藏的。 你總是可以為主鍵創建一個AUTO_INCREMENT字段(這比我認為MySQL在表中有隱藏字段更可取)。

考慮13.6.10.1的內容。 群集和輔助索引 ,似乎您無法真正定義聚集索引設置在哪一列:

  • 它要么在PK專欄上
  • 或者在具有僅具有非空值的UNIQUE索引的第一列上
  • 或者在某個內部專欄上 - 在你的情況下沒有那么有用^^

關於你帖子中的第二個問題:表上沒有PK,GUID上有UNIQUE索引; 它可能是可能的,但它不會改變聚集索引的任何內容:它仍然可能在GUID列上。


某種黑客攻擊可能是:

  • 沒有定義主鍵
  • 在date_created字段上放置一個UNIQUE索引(如果你在短時間內沒有創建太多行,那么它可能是可行的......)

不確定你可以在GUID上放置第二個UNIQUE索引......也許^^
並且不確定聚集索引會有多大變化; 但可能值得一試......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM