就性能而言,MySQL唯一索引和非唯一索引有什么区别?
假设我要在2列的组合上创建索引,并且该组合是唯一的,但是我创建了一个非唯一的索引。这会对MySQL使用的性能或内存产生重大影响吗?
同样的问题, 主 键和 唯一 索引之间有区别吗?
UNIQUE和PRIMARY KEY是 约束
,而不是索引。尽管大多数数据库通过使用索引来实现这些约束。除了索引之外,约束的额外开销也微不足道,尤其是当您计算出(而不是如果)无意重复出现时,跟踪和纠正无意重复的开销时。
如果您有很高的 选择性, 索引通常会更有效。这是不同值的数量与行总数的比率。
例如,在“社会保险号”列中,您可能有100万行,其中包含1百万个不同的值。因此,选择性为1000000/1000000 =
1.0(尽管有罕见的历史例外,但SSN却是唯一的)。
但是该表的另一列“性别”在100万行中可能只有两个不同的值。2/1000000 =极低的选择性。
确保具有UNIQUE或PRIMARY KEY约束的索引的选择性为1.0,因此它将始终与索引一样有效。
您询问了主键和唯一约束之间的区别。主要是,每个表只能有一个主键约束(即使该约束的定义包括多个列),而您可以有多个唯一约束。具有唯一约束的列可以允许NULL,而在主键约束中的列必须不允许NULL。否则,主键和唯一键在实现和使用上非常相似。
您在评论中询问是否使用MyISAM或InnoDB。在MySQL中,他们使用术语 存储引擎 。这两个存储引擎之间存在许多细微的区别,但主要的区别是:
如果您的应用程序中需要这些功能,则应使用InnoDB。
要回复您的评论,并不是那么简单。在很多情况下,InnoDB实际上比MyISAM快,因此它取决于您的应用程序对选择,更新,并发查询,索引,缓冲区配置等的组合。
有关存储引擎的非常全面的性能比较,请参见http://www.mysqlperformanceblog.com/2007/01/08/innodb-vs-
myisam-vs-falcon-benchmarks-
part-1/
。InnoDB经常击败MyISAM,以至于不可能说一个比另一个更快。
与大多数与性能相关的问题一样, 为您的应用程序 回答问题的唯一方法是使用您的应用程序和代表性数据样本测试两种配置,然后测量结果。
以下两者之间有区别吗: 以及: 在这两种情况下,名称是否唯一?索引唯一时意味着什么? 编辑:Postgres是唯一的约束,而索引没有回答我的问题。它考虑了FK的情况。我的问题与FK无关。我只想知道在这个例子中,这两个操作是否等价,其中不涉及FK。
问题内容: 不知道在PostgreSQL 9.3+中是否可行,但是我想在非唯一列上创建唯一索引。对于像这样的表: 我想仅能[快速]查询不同的日子。我知道我可以用来帮助执行不同的搜索,但是如果不同值的数量大大少于索引覆盖的行数,这似乎会增加额外的开销。就我而言,大约30天中有1天与众不同。 我是创建关系表以仅跟踪唯一条目的唯一选择吗?思维: 并在每次插入数据时使用触发器来更新它。 问题答案: 索引只
我在工作中继承了一个Dynamics CRM系统,运行:Version1612(8.2.2.112)(DB 8.2.2.112)。 我们所处的情况是,重复似乎通过失败的表单提交断断续续地发生,随后又重新提交。我们已经在内部发布了一个文档,解释了这种行为,并表示首先检查部分或全部事务是否真正成功是多么重要。但人类终归是人类,常常忘记... 是否有更好的解决方案,我没有,提供数据库级的一致性,并不妨碍
我做错了什么?我应该使用吗? 用于允许推断部分唯一索引的index_predicate。可以推断出满足谓词的任何索引(实际上不必是部分索引)。遵循创建索引格式。https://www.PostgreSQL.org/docs/9.5/static/sql-insert.html
问题内容: 我认为外键意味着单行必须引用单行,但是我正在查看某些表,但事实并非如此。表1在表2的列2上有一个具有外键约束的列1,但是在表2中有很多记录在列2中具有相同的值。在column2上也有非唯一索引。这是什么意思?外键约束是否仅表示至少一条记录必须存在,且在正确的列中具有正确的值?我认为这意味着必须有一个这样的记录(不确定空值是否适合图片,但目前我对此不太担心)。 更新:显然,此行为特定于M
CreateIndexes 根据struct中的tag来创建索引 CreateUniques 根据struct中的tag来创建唯一索引