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

我将如何使用它们?


#1楼

我觉得这已经很好地涵盖了,也许除了以下几点:

  • 如果选择性足够,简单的KEY / INDEX (或称为SECONDARY INDEX )确实可以提高性能。 在此问题上,通常的建议是,如果在其中应用了索引的结果集中的记录量超过了父表记录总数的20%,则该索引将无效。 实际上,每种体系结构都会有所不同,但是这个想法仍然是正确的。

  • 次要索引(并且非常特定于mysql)不应被视为与主键完全独立且不同的对象。 实际上,两者应结合使用,并且一旦知道了这些信息,便可以为mysql DBA提供一个附加工具:在Mysql中,索引嵌入了主键。 它带来了显着的性能改进,特别是在巧妙地构建隐式覆盖索引(如此处所述)时

  • 如果您认为数据应该是UNIQUE ,请使用唯一索引。 您可能会认为它是可选的(例如,在应用程序级别进行操作),并且可以使用普通索引,但是实际上它代表了Mysql的保证,即每一行都是唯一的,这顺便提供了性能上的好处。

  • 您只能在Innodb(在MySQL 5.6.4及更高版本中)和Myisam Engines中使用FULLTEXT (或称为SEARCH INDEX

  • 您只能对CHARVARCHARTEXT列类型使用FULLTEXT
  • 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

#2楼

所有这些都是指数。

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

独特:正如它所说。 具有该值的元组的行不能超过一个。 请注意,由于唯一键可以超过一列,这并不一定意味着索引中的每个单独列都是唯一的,但是这些列中值的每种组合都是唯一的。

索引:如果它不是主要的或唯一的,则不会限制插入表中的值,但确实可以更有效地查找它们。

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


#3楼

差异性

  • KEYINDEX是指普通的非唯一索引。 允许使用索引的非唯一值,因此索引的所有列中可能包含具有相同值的行。 这些索引不会对您的数据施加任何限制,因此它们仅用于访问-快速访问某些记录范围而无需扫描所有记录。

  • 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索引对查询有用,该查询必须使用索引的所有列。)

MySQL中INDEX,PRIMARY,UNIQUE,FULLTEXT之间的区别?相关推荐

  1. mysql insert into values select_mysql中insert语句中,value与values之间的区别?

    你的位置: 问答吧 -> JAVA -> 问题详情 mysql中insert语句中,value与values之间的区别? mysql> select * from tt; +---- ...

  2. MySQL中索引与视图的用法与区别详解

    索引与视图是我们在日常使用mysql必不可少的一部分,最近在学习中看到一本书中关于这方法写的不错,所以这篇文章主要给大家介绍了关于MySQL中索引与视图的使用与区别的相关资料,需要的朋友可以参考借鉴, ...

  3. mysql中 REPLACE INTO 和 INSERT INTO 的区别

    mysql中 REPLACE INTO 和 INSERT INTO 的区别 REPLACE INTO 和 INSERT INTO 功能类似,都是像表中插入数据,不同点在于:REPLACE INTO 首 ...

  4. php普通索引和唯一索引,MySQL中普通索引和唯一索引的区别详解

    本篇文章介绍了MySQL中普通索引和唯一索引的区别,讲解很详细,希望对学习MySQL的朋友有帮助! 需要注意的是: redo log中的数据,可能还没有 flush 到磁盘,磁盘中的 Page 1 和 ...

  5. Spring MVC和REST中@RestController和@Controller注释之间的区别

    Spring MVC中的@RestController注释不过是@Controller和@ResponseBody注释的组合. 它已添加到Spring 4.0中,以简化在Spring框架中RESTfu ...

  6. C#中的结构和类之间的区别

    C#类和结构 (C# class and structure) In C# and other programming languages, structure and classes are use ...

  7. MySQL+create+base,MySQL中CREATE DATABASE和CREATE SCHEMA的区别

    MySQL中CREATE DATABASE和CREATE SCHEMA的区别 create schema 是创建模式 create database 是创建数据库 但进入MySQL不用选择任何数据库即 ...

  8. mysql中的where和having子句的区别

    mysql中的where和having子句的区别 having的用法 having字句可以让我们筛选成组后的各种数据,where字句在聚合前先筛选记录,也就是说作用在group by和having字句 ...

  9. SQL 中的=,in,like之间的区别

    SQL中的=,in,like之间的区别: 三者都可以用来进行数据匹配 .但三者并不相同. 等号是用来查找与单个值匹配的所有数据: IN 是 用来查找与多个值匹配的所有数据: 而 LIKE用来查找与一个 ...

  10. MySQL中char,varchar和text的区别

    MySQL中char,varchar和text的区别 java程序中的string类型,在mysql数据表中可以有三种对应的类型:char,varchar和text. char,varchar和tex ...

最新文章

  1. 关于生成漏洞信息属性代码备份
  2. CallByName的一些缺陷
  3. 从零单排学Redis【铂金一】
  4. Python(7):__init__.py
  5. 聊一聊如何在.NET Core中使用Nacos 2.0
  6. 实战+练习!用机器学习预测肺癌 | 明晚8点美国西奈山博后免费直播
  7. Enterprise Suse运维
  8. Maven错误:“No goals have been specified for this build...”问题解决
  9. c语言从excal读取字符串,C语言操作EXCEL文件(读写)
  10. 和程序员男友过节是这样的
  11. 玻利亚(Polya)的《怎样解题》
  12. 毛毛虫 树形DP
  13. iphone5s越狱之后必装
  14. 项目经理如何处理中途接手的项目
  15. js判断手机,邮箱格式是否正确
  16. linux下编译和安装log4cxx,Linux下log4cxx的安装使用
  17. 指纹锁—AS608指纹模块
  18. 得分(Score,ACM/ICPC Seoul 2005,UVa1585)
  19. 【高等数学】常用的三角函数与反三角函数
  20. 解决Maven:Cannot resolve com.oracle.ojdbc:ojdbc6:11.2.0.1.0报红找不到问题,解决方案亲测有效详细图文教程 问题描述

热门文章

  1. 第十、十一周项目二-存储班长信息的学生类
  2. React Native之箭头函数和延展操作符(...)
  3. 在Eclipse中关联Android Private Libraries中文件的源代码
  4. java垃圾回收机制_乐字节Java|GC垃圾回收机制、package和import语句
  5. (0042) iOS 开发之iOS10.3新特性:如何动态更换APP图标
  6. (0026)iOS 开发之模块化封装初步实践
  7. PHP程序中的文件锁、互斥锁、读写锁使用技巧解析
  8. Python with语句
  9. 一个红 - 黑树的具体描述
  10. oracle稳定执行计划1