Mysql中key和index的区别点整理

 更新时间:2020年03月10日 14:38:20   作者:kuroniko  
在本篇文章里小编给大家整理的是关于Mysql中key和index的区别点整理,需要的朋友们可以学习下。

我们先来看下代码:

ALTER TABLE reportblockdetail ADD KEY taskcode (taskcode)
ALTER TABLE reportblockdetail DROP KEY taskcode

嗯这确实是比较容易混淆的地方。

在我们使用MySQL中可能压根不会注意这个问题,因为大多数情况下他们展示出来的效果都差不多,但是还是不能将他们划等号(至少理论上是这样)

索引(index)和约束(key)的区别主要在于二者的出发点不同,索引(index)负责维护表的查找和操作速度,约束(key)负责维护表的完整性。

而有这个困惑的话,很可能是由于MySQL中有一个奇怪现象:

  • MySQL中的索引是约束性索引(即创建索引自动也会创建约束)
  • 并且MySQL中创建约束也会自动附带索引。

很奇怪吧,两者不同的东西但是创建的时候又会附带给对方,为什么这样做呢?因为原因是:

MySQL中的约束效果是通过索引来实现的,MySQL数据库判断是否当前列是否unique就是通过unique索引判断的。

最后总结下:

  • 约束有主键约束,唯一约束,外键约束,非空约束,检查约束(在MySQL中压根无法使用检查约束,但可以正常建立),等
  • 索引有普通索引,主键索引,唯一索引,联合索引,全文索引,等。
  • 两者的实现都可以通过建表时实现,建表后的话通过alter语句来实现建立与删除,具体语句直接百度以上二点我经过测试在MySQL5.5 ,innoDB存储引擎下。

在理论上是不能将MySQL的key和index划等号的,他们不是一回事,但在实际使用中,他们基本没有区别。

内容扩展:

key与primary key区别

CREATE TABLE wh_logrecord ( 
logrecord_id int(11) NOT NULL auto_increment, 
user_name varchar(100) default NULL, 
operation_time datetime default NULL, 
logrecord_operation varchar(100) default NULL, 
PRIMARY KEY (logrecord_id), 
KEY wh_logrecord_user_name (user_name) 
) 

KEY与INDEX区别

批注:这部分我仍云里雾里。
KEY通常是INDEX同义词。如果关键字属性PRIMARY KEY在列定义中已给定,则PRIMARY KEY也可以只指定为KEY。这么做的目的是与其它数据库系统兼容。 PRIMARY KEY是一个唯一KEY,此时,所有的关键字列必须定义为NOT NULL。如果这些列没有被明确地定义为NOT NULL,MySQL应隐含地定义这些列。一个表只有一个PRIMARY KEY。

MySQL 中Index 与Key 的区别

Key即键值,是关系模型理论中的一部份,比如有主键(Primary Key),外键(Foreign Key)等,用于数据完整性检否与唯一性约束等。而Index则处于实现层面,比如可以对表个的任意列建立索引,那么当建立索引的列处于SQL语句中的Where条件中时,就可以得到快速的数据定位,从而快速检索。至于Unique Index,则只是属于Index中的一种而已,建立了Unique Index表示此列数据不可重复,猜想MySQL对Unique Index类型的索引可以做进一步特殊优化吧。

于是乎,在设计表的时候,Key只是要处于模型层面的,而当需要进行查询优化,则对相关列建立索引即可。

另外,在MySQL中,对于一个Primary Key的列,MySQL已经自动对其建立了Unique Index,无需重复再在上面建立索引了。

以上就是Mysql中key和index的区别点整理的详细内容,更多关于Mysql中的key和index的区别的资料请关注脚本之家其它相关文章!

相关文章

  • 关于Mysql搭建主从复制功能的步骤实现

    关于Mysql搭建主从复制功能的步骤实现

    这篇文章主要介绍了关于Mysql搭建主从复制功能的步骤实现,在实际的生产中,为了解决Mysql的单点故障已经提高MySQL的整体服务性能,一般都会采用主从复制,需要的朋友可以参考下
    2023-05-05
  • 2023最新安装mysql8.0.33方式教程

    2023最新安装mysql8.0.33方式教程

    这几天被各种环境的配置搞疯了,查询了很多资料,也算有点经验,对于Mysql的安装进行了总结,这篇文章主要给大家介绍了关于2023年最新安装mysql8.0.33的方式教程,需要的朋友可以参考下
    2023-06-06
  • macOS下mysql 8.0.16 安装配置图文教程

    macOS下mysql 8.0.16 安装配置图文教程

    这篇文章主要为大家详细介绍了macOS下mysql 8.0.16 安装配置图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • MySQL 开启慢查询日志的方法

    MySQL 开启慢查询日志的方法

    本篇文章主要介绍了MySQL 开启慢查询日志的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • Linux系统下实现远程连接MySQL数据库的方法教程

    Linux系统下实现远程连接MySQL数据库的方法教程

    MySQL默认root用户只能本地访问,不能远程连接管理mysql数据库,Linux如何开启mysql远程连接?下面这篇文章主要给大家介绍了在Linux系统下实现远程连接MySQL数据库的方法教程,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-06-06
  • mysql插入前判断数据是否存在的操作

    mysql插入前判断数据是否存在的操作

    这篇文章主要介绍了mysql插入前判断数据是否存在的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • MySQL表的增删改查(CRUD)

    MySQL表的增删改查(CRUD)

    这篇文章主要介绍了如何对数据库增删改查,想要更全面了解的小伙伴,可以详细阅读本文
    2023-03-03
  • MySQL字符集不一致导致索引失效的解决办法

    MySQL字符集不一致导致索引失效的解决办法

    本文分析了一个由于字符集不一致,导致增加了索引但是无法使用的案例,通过索引进行查找时需要进行数据的比较,字符集不一致时需要使用 convert 函数进行转换,从而导致索引失效,文中有详细的解决办法,需要的朋友可以参考下
    2024-04-04
  • MySQL的事件调度器使用介绍

    MySQL的事件调度器使用介绍

    这篇文章主要介绍了MySQL的事件调度器使用介绍,本文讲解了事件调度器的开启、创建、修改、删除等操作的使用实例,需要的朋友可以参考下
    2015-06-06
  • 对于mysql的query_cache认识的误区

    对于mysql的query_cache认识的误区

    一直以来,对于mysql的query_cache,在网上就流行着这样的说法,对于mysql的query_cache键值就是mysql的query,所以,如果在query中有任何的不同,包括多了个空格,都会导致mysql认为是不同的查询
    2012-03-03

最新评论