在创建MySQL表时,主表、唯一表、索引表和全文表之间有什么区别
我将如何使用它们
分歧
-
键或索引指正常的非唯一索引。允许索引的非不同值,因此索引可能包含索引所有列中具有相同值的行。这些索引不会对您的数据施加任何限制,因此它们仅用于访问—用于在不扫描所有记录的情况下快速到达特定范围的记录
-
UNIQUE指索引的所有行都必须唯一的索引。也就是说,对于该索引中的所有列,同一行可能不会与另一行具有相同的非空值。除了用于快速到达特定记录范围外,还可以使用唯一索引对数据实施约束,因为数据库系统不允许在插入或更新数据时破坏“不同值”规则
您的数据库系统可能允许对允许空值的列应用唯一索引,在这种情况下,如果两行都包含空值,则允许两行相同(此处的基本原理是空值被认为不等于自身)。但是,根据您的应用程序,可能会发现这是不可取的:如果希望防止出现这种情况,则应在相关列中不允许空值
-
PRIMARY的作用与唯一索引完全相同,只是它总是被命名为“PRIMARY”,并且一个表上可能只有一个索引(而且应该总是有一个;尽管某些数据库系统不强制执行此操作)。主索引旨在作为唯一标识表中任何行的主要手段,因此与UNIQUE不同,它不应用于允许空值的任何列。主索引应位于足以唯一标识行的最小列数上。通常,这只是一列,其中包含一个唯一的自动递增数字,但如果有任何其他内容可以唯一标识行,例如;国家代码“;在国家/地区列表中,您可以使用该选项
一些数据库系统(如MySQL的InnoDB)会将表的记录按它们在主索引中出现的顺序存储在磁盘上
-
全文索引与上述所有索引不同,并且它们的行为在数据库系统之间存在显著差异。全文索引仅适用于使用MATCH()/antim()子句完成的全文搜索,与上述三种不同,它们通常在内部使用b树(允许从最左边的列开始选择、排序或范围)或哈希表(允许从最左边的列开始选择)实现
如果其他索引类型是通用的,则全文索引是专门的,因为它的用途很窄:它只用于;全文搜索“;特色
相似性
-
所有这些索引中可能有多个列
-
除了全文之外,列顺序很重要:为了使索引在查询中有用,查询必须使用索引中从左侧开始的列—它不能只使用索引的第二、第三或第四部分,除非它还使用索引中的前几列来匹配静态值。(要使全文索引对查询有用,查询必须使用索引的所有列。)