我正在阅读这个问题,关于这四个之间的区别:Differences between INDEX, PRIMARY, UNIQUE, FULLTEXT in MySQL?
但是,阅读之后,这对我来说都是非常抽象和模糊的。如果我有一些关于什么时候使用它的例子,也许这将有助于我更具体地理解它。
例如,我认为对于字段user_id
,我们会使用索引UNIQUE
,对吗?
答案 0 :(得分:3)
主键本身不是索引 - 这是一个约束 主键唯一地标识所有其余的行 - 这意味着值必须是唯一的。主键通常由一列组成,但可以由多个列组成 - 多个列称为复合列....
唯一约束在MySQL中作为索引实现 - 它保证了相同的值在定义的列中不会出现多次。唯一约束/索引在主键列上是多余的,主键可以被视为同义词,但具有更大的含义。这些也支持复合材料......
在MySQL(和SQL Server)中,有两种类型的索引 - clustered and non-clustered。聚簇索引通常与主键关联,如果在CREATE TABLE
语句中定义了主键,则会自动创建。但它不一定是 - 它是表格中最重要的索引,因此如果将其与不同列关联起来更为优化,那么应该检查更改。表只能有一个聚簇索引 - 其余是非聚簇索引。您必须定义索引的空间量取决于表引擎 - 1,000 for MyISAM and 767 for InnoDB。索引(非聚簇)用于加速数据检索,可以使用SELECT,JOIN,WHERE和ORDER BY子句中的列来触发它们的使用。但是由于维护了这些数据,它们也会降低INSERT / UPDATE / DELETE语句的速度。
全文索引明确用于全文搜索(FTS)功能 - 没有其他功能可以使用它们。它们仅适用于使用基于字符串的数据类型定义的列。
请注意,索引不是 ANSI - 相比之下,相似之处相对一致。 Oracle不区分索引 - 它们都是一样的。
答案 1 :(得分:2)
以下简要介绍了它们的用途以及何时使用它们:
请注意,我这里只考虑单列索引。也可以使用多列索引。
答案 2 :(得分:0)
如果你有一个带有id,姓名,电子邮件和生物信息的“人员”表......
主键也是UNIQUE