MySQL中INDEX、PRIMARY、UNIQUE和FULLTEXT的区别是什么?

29 浏览
0 Comments

MySQL中INDEX、PRIMARY、UNIQUE和FULLTEXT的区别是什么?

在创建MySQL表时,PRIMARY、UNIQUE、INDEX和FULLTEXT之间有什么区别?

我该如何使用它们?

admin 更改状态以发布 2023年5月20日
0
0 Comments

这些都是索引的种类。

主键索引:必须唯一,是一个索引,很可能是物理索引,每个表只能有一个。

唯一索引:顾名思义。不能有超过一个具有这个值的元组的行。请注意,由于唯一键可以跨越多个列,这并不一定意味着索引中的每个单独列都是唯一的,而是该这些列的每个值组合都是唯一的。

普通索引:如果不是主键或唯一索引,则不会限制插入表中的值,但允许更高效地查找这些值。

全文索引:一种更为专业的索引形式,允许进行全文搜索。可以将其视为(本质上)为指定列中的每个“单词”创建一个“索引”。

0
0 Comments

区别

  • KEYINDEX指的是普通的非唯一索引。允许索引中存在非唯一的值,因此索引可以包含所有索引列中具有相同值的行。这些索引不对数据强制执行任何约束,因此它们仅用于访问-用于快速到达某些记录范围而不扫描所有记录。

  • UNIQUE指的是索引,其中索引的所有行必须是唯一的。也就是说,与该索引的另一行相比,同一行可能不具有相同的所有列中的非NULL值。除了用于快速到达特定的记录范围之外,唯一索引还可以用于强制执行数据约束,因为数据库系统在插入或更新数据时不允许违反唯一值规则。

    您的数据库系统可能允许将唯一索引应用于允许NULL值的列,此时,如果两行都包含NULL值,则允许它们相同(在这种情况下,NULL被认为与自己不相等)。但是,根据您的应用程序,您可能会发现这不可取:如果您希望防止这种情况发生,则应禁止相关列中的NULL值。

  • PRIMARY与唯一索引完全相同,只是它始终被命名为“PRIMARY”,并且在表格上只能有一个(应该始终有一个;尽管某些数据库系统不强制执行此规则)。主键应该作为唯一识别表中任何行的主要手段,因此,与唯一索引不同,主键不应用于允许NULL值的任何列。您的主键应该是足以唯一识别一行的最少列数。通常,这仅是包含唯一自动增量号码的一个列,但如果有其他可以唯一识别行的任何内容,例如“国家代码”在国家列表中,您也可以使用它。

  • 一些数据库系统(例如MySQL的InnoDB)将表的实际记录存储在PRIMARY KEY的B-tree索引内部。

  • FULLTEXT索引与上述所有索引不同,它们在数据库系统之间的行为有很大的差异。 FULLTEXT索引仅对使用MATCH() / AGAINST()子句进行全文搜索有用,而上述三个典型地使用b-tree(允许从左侧开始选择、排序或范围)或哈希表(允许从左侧开始选择)内部实现。

    其他索引类型是通用的,FULLTEXT索引是专门的,因为它只用于“全文搜索”功能。

相似之处

  • 所有这些索引都可以有多个列。

  • 除FULLTEXT外,列顺序很重要:对于索引在查询中有用,查询必须使用从左侧开始的索引列 - 除非它还使用前面的列在索引中匹配静态值。 (对于FULLTEXT索引对查询有用,查询必须使用索引的所有列。)

0