创建MySQL表时,PRIMARY,UNIQUE,INDEX和FULLTEXT有什么区别?
我将如何使用它们?
差异性 KEY或INDEX是指普通的非唯一索引。允许使用索引的非唯一值,因此索引的所有列中可能包含具有相同值的行。这些索引不会对您的数据施加任何限制,因此它们仅用于访问-快速访问某些记录范围而无需扫描所有记录。
UNIQUE引用一个索引,其中索引的所有行都必须是唯一的。也就是说,对于该索引中的所有列,同一行可能不具有与另一行相同的非NULL值。除了用于快速达到某些记录范围外,UNIQUE索引还可以用于对数据施加约束,因为数据库系统不允许在插入或更新数据时打破唯一值规则。
您的数据库系统可能允许将UNIQUE索引应用于允许NULL值的列,在这种情况下,如果两行都包含NULL值,则允许两行相同(此处的理由是NULL被视为不等于其自身)。但是,根据您的应用程序,您可能会发现这是不希望的:如果希望防止这种情况,则应在相关列中禁止使用NULL值。
PRIMARY的行为与UNIQUE索引完全相同,不同之处在于它始终被命名为“ PRIMARY”,并且表上可能只有一个(并且应该总是一个;尽管某些数据库系统不强制执行此操作)。PRIMARY索引旨在作为唯一标识表中任何行的主要手段,因此与UNIQUE不同,它不应在任何允许NULL值的列上使用。您的PRIMARY索引应位于足以唯一标识一行的最少列数上。通常,这只是一列,其中包含一个唯一的自动递增的数字,但是,如果还有其他任何东西可以唯一地标识一行,例如国家列表中的“国家/地区代码”,则可以改用它。
某些数据库系统(例如MySQL的InnoDB)会将表的记录存储在磁盘上,顺序是它们在PRIMARY索引中出现的顺序。
FULLTEXT索引与上述所有索引均不同,并且它们的行为在数据库系统之间也存在很大差异。FULLTEXT索引仅对使用MATCH()/ AGAINST()子句进行的全文搜索有用,与上述三个不同(通常在内部使用b树(允许选择,排序或从最左列开始的范围)实现)哈希表(允许从最左边的列开始选择)。
在其他索引类型是通用索引的情况下,FULLTEXT索引是专用的,因为它的作用范围很窄:它仅用于“全文搜索”功能。
相似之处 所有这些索引中可能都包含不止一列。
除FULLTEXT外,列顺序很重要:要使索引在查询中有用,查询必须使用从左开始的索引中的列-它不能仅使用索引的第二,第三或第四部分。索引,除非它也使用索引中的前几列来匹配静态值。(为使FULLTEXT索引对查询有用,该查询必须使用索引的所有列。)来源:stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。