在Guid Column上使用Unique索引的重点是什么?

use*_*433 4 sql

因为,guid值总是唯一的,为什么要使用唯一索引.当你使用一个独特的索引减慢插入时,这是不是真的?

Bil*_*win 6

UNIQUE约束的使用:

  • 强制执行独特性. 尽管生成的GUID很可能是唯一的,但您可以轻松地在多行中插入相同的GUID.当然你可以错误地做到这一点,但这甚至可能是你设计的一部分,例如多对多表中的复合键约束.

    CREATE TABLE BookAuthors (
      guid INT PRIMARY KEY,
      BookGuid INT NOT NULL,
      AuthorGuid INT NOT NULL,
      FOREIGN KEY (BookGuid) REFERENCES Books(BookGuid),
      FOREIGN KEY (AuthorGuid) REFERENCES Authors(AuthorGuid),
      UNIQUE KEY (BookGuid, AuthorGuid)
    );
    
    Run Code Online (Sandbox Code Playgroud)
  • 成为外键的目标. 您可能习惯于FOREIGN KEY引用父表的PRIMARY KEY.你知道FOREIGN KEY还可以引用一个独特的键吗?

    CREATE TABLE Acknowledgements (
      guid INT PRIMARY KEY,
      BookGuid INT NOT NULL,
      AuthorGuid INT NOT NULL,
      Acknowledged VARCHAR(100) NOT NULL,
      -- this works because of the UNIQUE constraint in BookAuthors:
      FOREIGN KEY (BookGuid, AuthorGuid) 
        REFERENCES BookAuthors (BookGuid, AuthorGuid)
    );
    
    Run Code Online (Sandbox Code Playgroud)
  • 性能. 正如其他人所指出的那样,UNIQUE是一种约束,但在大多数品牌的数据库中,当您定义UNIQUE,PRIMARY KEY或FOREIGN KEY约束时,隐式索引.你插入任何索引表时会有一些开销是正确的,但索引的性能优势是净赢,通常是很多次.

  • 唯一性尽管是NULL.虽然主键对于使用标识表中的行至关重要,但它们不允许NULL.您可以使用UNIQUE约束来强制可空列中的唯一性.