This描述了不同的索引:
键或索引指的是正常的非唯一索引。允许索引的非不同值,因此索引可以在索引的所有列中包含具有相同值的行。这些索引不对数据强制执行任何限制,因此它们仅用于确保某些查询能够快速运行。 唯一是指索引的所有行都必须是唯一的索引。也就是说,对于此索引中的所有列,同一行可能没有与另一行相同的非空值。除了用于加速查询之外,还可以使用唯一索引来强制限制数据,因为数据库系统不允许在插入或更新数据时破坏这一不同的值规则。
我理解应用程序逻辑的好处(您不需要唯一性检查),但是性能也有改善吗?具体来说,使用索引而不是唯一的写入速度有多快?
发布于 2018-03-02 08:11:07
UNIQUE KEY
是一个约束,当您要强制执行该约束时,您可以使用它。
KEY
是一个索引,您可以选择它来提高某些查询的效率。
插入到具有任一类型索引的表中的性能实际上是相同的。也就是说,如果有的话,这种差别太小了,不值得为了性能而选择另一种。
选择支持约束的索引类型。仅当您希望强制执行唯一性时,才使用UNIQUE KEY
。否则使用KEY
。
你的问题就像问,“哪一种更快,摩托车还是快艇?”他们是在不同的情况下使用,所以判断他们的速度不是重点。
发布于 2018-03-07 18:15:39
插入
插入一行时,立即检查所有唯一的键(PRIMARY
和UNIQUE
)是否有重复的键。如果有必要,这将使您在INSERT
上得到一个错误。非唯一INDEXes
的更新会延迟(有关讨论,请参阅“更改缓冲”)。工作将在后台完成,这样您的INSERT
就不会等待它了。
因此,UNIQUE
中插入的开销很小。但是,正如已经指出的,如果您需要唯一性约束,那么就使用它。
选择
任何类型的索引(PRIMARY
、UNIQUE
或INDEX
)都可以用来加速SELECT
。大多数情况下,索引的类型是相同的。但是,使用PRIMARY
和UNIQUE
,优化器可以知道只有一个(或可能为零)行与给定值匹配,因此它可以获取一行,然后退出。对于非唯一索引,可能有多行,因此它继续扫描索引,检查更多行。此扫描在查看第一个不匹配行后停止。因此,非唯一索引与唯一索引相比,有一个很小(非常小)的开销。
底线
性能问题不像语义那么重要(唯一性约束与非唯一性约束)。
https://stackoverflow.com/questions/49072904
复制