开发者社区> 问答> 正文

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

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

我将如何使用它们?

展开
收起
保持可爱mmm 2020-05-10 21:42:19 571 0
1 条回答
写回答
取消 提交回答
  • 差异性 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

    2020-05-10 21:42:33
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
One Box: 解读事务与分析一体化数据库 HybridDB for MySQL 立即下载
One Box:解读事务与分析一体化数据库HybridDB for MySQL 立即下载
如何支撑HTAP场景-HybridDB for MySQL系统架构和技术演进 立即下载

相关镜像