2009-10-18 86 views
3

我是一個試驗MySQL的SQL Server小夥,對於即將到來的大型項目(由於授權),我沒有找到很多沒有聚集索引的創建主鍵的信息。我讀過的所有文檔都在5.1中說過,主鍵會自動給出一個聚集索引。由於我使用主鍵列(GUID)的二進制(16),我寧願沒有聚集索引。所以...創建一個沒有聚集索引的mysql主鍵?

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

回答

2

考慮什麼是對13.6.10.1. Clustered and Secondary Indexes說,看來你真的不能確定哪個列聚集索引設置:

  • 它無論是在PK列
  • 或具有唯一索引的第一列只有具有非空值
  • 或一些內部列 - 在沒有你的情況^^

關於在文章的第二個問題是有用的:無PK該表和GUID上的UNIQUE索引;這可能是可能的,但它不會改變聚集索引的任何內容:它仍然可能在GUID列上。


某種黑客攻擊的可能是:

  • 沒有定義主鍵
  • 地方唯一索引您DATE_CREATED場(如果你不創造短期內過多的行的時間,也可能是可行的......)

不知道你可以放置一個第二唯一索引的GUID ...也許^^
而且不知道這會改變很多關於這些CLU指標索引;但可能值得一試...

3

這取決於您正在使用哪種存儲引擎。 MyISAM表不支持聚簇索引,因此MyISAM表上的主鍵未聚集。然而,InnoDB表上的主鍵是集羣化的。

你應該consult the MySQL Manual關於每個存儲引擎的優點和缺點的更多細節。

您需要有一個主鍵;如果你自己沒有創建一個,MySQL會爲你創建一個隱藏的。你總是可以爲主鍵創建一個AUTO_INCREMENT字段(我認爲這比讓MySQL中的表隱藏字段更好)。

相關問題