当前位置:  开发笔记 > 后端 > 正文

MySQL中的INDEX,PRIMARY,UNIQUE,FULLTEXT之间的区别?

如何解决《MySQL中的INDEX,PRIMARY,UNIQUE,FULLTEXT之间的区别?》经验,为你挑选了3个好方法。

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

我该如何使用它们?



1> thomasrutter..:

差异

KEYINDEX指的是正常的非唯一索引.允许索引的非不同值,因此索引可以包含索引的所有列中具有相同值的行.这些索引不会对您的数据施加任何限制,因此它们仅用于确保某些查询可以快速运行.

UNIQUE指的是索引的所有行必须唯一的索引.也就是说,对于此索引中的所有列,同一行可能不具有与另一行相同的非NULL值.除了用于加速查询之外,UNIQUE索引还可用于强制限制数据,因为数据库系统在插入或更新数据时不允许破坏此不同值规则.

您的数据库系统可能允许将UNIQUE索引应用于允许NULL值的列,在这种情况下,如果两行都包含NULL值,则允许两行相同(这里的基本原理是NULL被认为不等于它自己).但是,根据您的应用程序,您可能会发现这种情况不受欢迎:如果您希望阻止这种情况,则应在相关列中禁止使用NULL值.

PRIMARY的行为与UNIQUE索引完全相同,只是它总是命名为'PRIMARY',并且表中可能只有一个(并且应该总是有一个;尽管某些数据库系统不强制执行此操作).PRIMARY索引旨在作为唯一标识表中任何行的主要方法,因此与UNIQUE不同,它不应在任何允许NULL值的列上使用.您的PRIMARY索引应该位于足以唯一标识行的最小列数上.通常,这只是一个包含唯一自动递增数字的列,但如果还有其他任何可以唯一标识行的列,例如国家/地区列表中的"countrycode",则可以使用该列.

某些数据库系统(例如MySQL的InnoDB)将按照它们在PRIMARY索引中出现的顺序将表记录存储在磁盘上.

FULLTEXT索引与上述所有索引不同,它们的行为在数据库系统之间存在显着差异.FULLTEXT索引仅对使用MATCH()/ AGAINST()子句进行的全文搜索很有用,与上述三种不同 - 通常使用b-tree在内部实现(允许从最左列开始选择,排序或范围)或哈希表(允许从最左侧列开始选择).

在其他索引类型是通用的情况下,FULLTEXT索引是专用的,因为它用于狭窄的目的:它仅用于"全文搜索"功能.

相似

所有这些索引中可能包含多个列.

除了FULLTEXT之外,列顺序很重要:要使索引在查询中有用,查询必须使用从左侧开始的索引中的列 - 它不能仅使用索引的第二,第三或第四部分index,除非它还使用索引中的前一列来匹配静态值.(要使FULLTEXT索引对查询有用,查询必须使用索引的所有列.)


是.它也只用于MySQL上的MyISAM数据库,而不是InnoDB.其他数据库服务器可能具有可能有不同用途的等效功能
这是否意味着如果您不在查询中使用MATCH()/ AGAINST(),那么FULLTEXT索引基本上是无用的并且是空间的腰部?
@thomasrutter MySQL从5.6版开始支持InnoDB中的FULLTEXT

2> tpdi..:

所有这些都是各种指数.

primary:必须是唯一的,是索引,是(可能)物理索引,每个表只能有一个.

独特:正如它所说.您不能有多个具有此值的元组的行.请注意,由于唯一键可以包含多个列,因此这并不一定意味着索引中的每个列都是唯一的,但这些列中每个值的组合都是唯一的.

index:如果它不是主要的或唯一的,它不会约束插入表中的值,但它确实可以更有效地查找它们.

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


Primarys可以是MySQL(以及许多其他DB)中的复合,即多键.他们只是一个特殊的指数.唯一不是真正的索引,它是一个约束(它确实需要索引在合理的时间内强制执行,因此创建一个).

3> Sebas..:

我觉得这已被很好地覆盖,可能除了以下内容:

如果选择性足够,简单KEY/ INDEX(或以其他方式称SECONDARY INDEX)会提高性能.在这个问题上,通常的建议是,如果应用索引的结果集中的记录数量超过父表记录总量的20%,那么索引将无效.在实践中,每个架构都会有所不同,但这个想法仍然是正确的.

辅助索引(并且非常特定于mysql)不应被视为与主键完全独立且不同的对象.实际上,两者都应该联合使用,一旦知道这些信息,就为mysql DBA提供了一个额外的工具:在Mysql中,索引嵌入了主键.它可以显着提高性能,特别是在巧妙构建隐含覆盖索引时,如此处所述

如果您觉得您的数据应该是UNIQUE,请使用唯一索引.您可能认为它是可选的(例如,在应用程序级别进行处理)并且普通索引可以执行,但它实际上代表了Mysql的每一行都是唯一的保证,这偶然提供了性能优势.

您只能使用FULLTEXT(或以其他方式调用SEARCH INDEX)Innodb(在MySQL 5.6.4及更高版本中)和Myisam Engines

您只能使用FULLTEXTCHAR,VARCHARTEXT列类型

FULLTEXT索引涉及的不仅仅是创建索引.创建了一堆系统表,一个完全独立的缓存系统,并应用了一些特定的规则和优化.请参阅http://dev.mysql.com/doc/refman/5.7/en/fulltext-restrictions.html和http://dev.mysql.com/doc/refman/5.7/en/innodb-fulltext-index.html

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有