gpt4 book ai didi

MySQL 5.0 索引 - 唯一与非唯一

转载 作者:IT老高 更新时间:2023-10-28 12:54:39 25 4
gpt4 key购买 nike

MySQL 唯一索引和非唯一索引在性能方面有什么区别?

假设我想在 2 列的组合上创建一个索引,并且该组合是唯一的,但我创建了一个非唯一索引。这会对 MySQL 使用的性能或内存产生重大影响吗?

同样的问题,primary key和unique index有区别吗?

最佳答案

UNIQUE 和 PRIMARY KEY 是约束,而不是索引。尽管大多数数据库通过使用索引来实现这些约束。除了索引之外,约束的额外开销是微不足道的,尤其是当您计算跟踪和纠正意外重复(而不是如果)发生时的成本时。

如果您有较高的选择性,索引通常会更有效。这是不同值的数量与总行数的比率。

例如,在社会安全号码列中,您可能有 100 万行具有 100 万个不同的值。所以选择性是 1000000/1000000 = 1.0(尽管历史上很少有异常(exception),但 SSN 的目的是唯一的)。

但该表中的另一列“性别”可能只有两个不同的值,超过 100 万行。 2/1000000 = 选择性非常低。

具有 UNIQUE 或 PRIMARY KEY 约束的索引保证具有 1.0 的选择性,因此它将始终与索引一样有效。

您询问了主键和唯一约束之间的区别。主要是每个表只能有一个主键约束(即使该约束的定义包括多个列),而您可以有多个唯一约束。具有唯一约束的列可能允许 NULL,而主键约束中的列不得允许 NULL。否则,主键和唯一键的实现和使用非常相似。

您在评论中询问是否使用 MyISAM 或 InnoDB。在 MySQL 中,他们使用术语存储引擎。这两种存储引擎之间存在许多细微差别,但主要有:

  • InnoDB 支持事务,因此您可以选择回滚或提交更改。 MyISAM 实际上总是自动提交。
  • InnoDB 强制执行外键约束。 MyISAM 不强制甚至不存储外键约束。

如果您的应用程序需要这些功能,那么您应该使用 InnoDB。


要回复您的评论,没那么简单。在很多情况下,InnoDB 实际上比 MyISAM 更快,所以它取决于您的应用程序的选择、更新、并发查询、索引、缓冲区配置等的组合。

http://www.mysqlperformanceblog.com/2007/01/08/innodb-vs-myisam-vs-falcon-benchmarks-part-1/用于对存储引擎进行非常彻底的性能比较。 InnoDB 经常战胜 MyISAM,显然不可能说一个比另一个快。

与大多数与性能相关的问题一样,为您的应用程序回答问题的唯一方法是使用您的应用程序和代表性数据样本测试这两种配置,并测量结果。

关于MySQL 5.0 索引 - 唯一与非唯一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/388982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com