MySQL 主键和索引

主键:关系数据可依赖于主键,主键在物理层面上主要有两个用途:

  1. 唯一的标识一行
    因为主键可以唯一标识一行记录,所以可以确保执行数据更新、删除的时候不会出现张冠李戴的错误。

  2. 作为一个可以被外键引用的对象
    一个表的主键通常可以作为另一个表的外键,主键通过与外键构成参照完成性约束,防止出现数据不一致。
    主键分为单列主键和复合主键:

主键分为两种:

  1. 单一主键:只用一列来唯一标识一行
  2. 复合主键(联合主键): 当使用一列不能唯一表示一行的时候,就要采用多列唯一标识一行

索引:对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度

  1. 索引是应用在 SQL 查询语句的条件(一般作为 WHERE 子句的条件)

  2. 实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录

  3. 上面都在说使用索引的好处,但过多的使用索引将会造成滥用。因此索引也会有它的缺点:虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行(INSERT、UPDATE和DELETE)。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件

  4. 建立索引会占用磁盘空间的索引文件

索引分为两种:

  1. 单列索引:只有某一列作为索引,默认为index索引,这一列可以包含重复数据。如果某列不存在重复数据,最好设置成唯一索引unique形式,它比index的索引速度更快。
  2. 复合索引:每次检索都需要使用多列进行时,可以把多列设为复合索引。根据多列是否唯一,也分为index索引和unique索引。
    【注意】对于复合索引:Mysql是从左到右使用索引中的字段,一个查询可以只是用索引的一部分,但必须是左侧部分。如索引是indexName(a,b,c),则可以支持a|a,b|a,b,c3种组合进行查找。

总结:

主键相当于一本书的页码,索引相当于书的目录

主键和索引的关系:

  1. 主键是一定是唯一性索引,但唯一性索引不一定是主键

  2. 数据库管理系统对于主键自动生成唯一索引,所以主键是一个特殊的索引

  3. 唯一索引标识索引值唯一,一个表可以有多个唯一索引,但主键只能有一个

  4. 主键列不能为空,但唯一索引列可以为空

  5. 一张表只能有一个主键,但可以有多个索引

索引的类型

在MySQL中,通常我们所指的索引类型,有以下几种:

常规索引,也叫普通索引(index或key),它可以常规地提高查询效率。一张数据表中可以有多个常规索引。常规索引是使用最普遍的索引类型,如果没有明确指明索引的类型,我们所说的索引都是指常规索引。

主键索引(Primary Key),也简称主键。它可以提高查询效率,并提供唯一性约束。一张表中只能有一个主键。被标志为自动增长的字段一定是主键,但主键不一定是自动增长。一般把主键定义在无意义的字段上(如:编号),主键的数据类型最好是数值。

唯一索引(Unique Key),可以提高查询效率,并提供唯一性约束。一张表中可以有多个唯一索引。

全文索引(Full Text),可以提高全文搜索的查询效率,一般使用Sphinx替代。但Sphinx不支持中文检索,Coreseek是支持中文的全文检索引擎,也称作具有中文分词功能的Sphinx。实际项目中,我们用到的是Coreseek。

外键索引(Foreign Key),简称外键,它可以提高查询效率,外键会自动和对应的其他表的主键关联。外键的主要作用是保证记录的一致性和完整性。

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值