mysql-Mysql中index与key的区别

问题描述

Mysql中index与key的区别

-------------------------+
| user | CREATE TABLE user (
id int(11) NOT NULL,
name varchar(50) default NULL,
companyId int(11) default NULL,
PRIMARY KEY (id),
KEY company_user_id (companyId)
) ENGINE=InnoDB DEFAULT CHARSET=gbk |

上面的建表语句中,KEY company_user_id (companyId),这句话起什么作用?
和 index company_user_id (companyId)有什么区别?

解决方案

我的理解是这样的,不知道对不对:
一个是数据库逻辑层(KEY)的东西,一个是实现层(INDEX)的。
KEY有两个核心属性: 1 是 键约束 2 是索引
KEY的索引是通过INDEX来实现的。

实际使用中如果没有涉及字段间的约束,二者的作用是一样的。

解决方案二:

key是主键,index是索引,两者都要求字段保持唯一性。key用于完整性约束,一张表的外键是另外一张表的主键。index可以提高改字段的查询效率。

解决方案三:

show create table 命令可以看到表的key、index信息
如果只是key的话,就是普通索引。
mysql的key和index多少有点令人迷惑,单独的key和其它关键词结合的key(primary key)实际表示的意义是不同,这实际上考察对数据库体系结构的了解的。
key 是数据库的物理结构,处于模型层面的,它包含两层意义和作用,一是约束(偏重于约束和规范数据库的结构完整性),二是索引(辅助查询用的)。
index是数据库的物理结构,处于实现层面的,它只是辅助查询的。
······
参考自:MySQL key与index的区别 http://www.data.5helpyou.com/article392.html

解决方案四:

这个回答感觉完全没有营养。

时间: 2024-09-06 12:46:40

mysql-Mysql中index与key的区别的相关文章

mysql数据库中find_in_set()和in()用法区别

find_in_set 函数使用方法    个例子来说: 有个文章表里面有个type字段,它存储的是文章类型,有 1头条.2推荐.3热点.4图文...1,12,13 等等 . 现在有篇文章他既是 头条,又是热点,还是图文, type中以 1,3,4 的格式存储. 那我们如何用sql查找所有type中有4图文标准的文章呢?? 这就要我们的 find_in_set 出马的时候到了. 以下为引用的内容:  代码如下 复制代码 select * from article where FIND_IN_SE

mysql中char与varchar的区别

在mysql教程中char与varchar的区别呢,都是用来存储字符串的,只是他们的保存方式不一样罢了,char有固定的长度,而varchar属于可变长的字符类型. char与varchar的区别 char (13)长度固定, 如'www.111cn.net'  存储需要空间 13个字符 varchar(13) 可变长 如'www.111cn.net'  需要存储空间 14字符, 从上面可以看得出来char 长度是固定的,不管你存储的数据是多少他都会都固定的长度.而varchar则处可变长度但他

mysql数据库中MyISAM与InnoDB区别及性能详谈

MyISAM:这个是默认类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的顺序访问方法) 的缩写,它是存储记录和文件的标准方法.与其他存储引擎比较,MyISAM具有检查和修复表格的大多数工具. MyISAM表格可以被压缩,而且它们支持全文搜索.它们不是事务安全的,而且也不支持外键.如果事物回滚将造成不完全回滚,不具有原子性.如果执行大量的SELECT,MyISAM是更好的选择. MyIASM是IASM表的新版本,有如下扩展:

简单分析MySQL中的primary key功能_Mysql

在5.1.46中优化器在对primary key的选择上做了一点改动: Performance: While looking for the shortest index for a covering index scan, the optimizer did not consider the full row length for a clustered primary key, as in InnoDB. Secondary covering indexes will now be pref

MySQL中int和integer的区别

环境: MySQLSever 5.1 问题:MySQL 中int和integer什么区别 答案:没有区别 分析: · INT[(M)][UNSIGNED] [ZEROFILL] 普通大小的整数.带符号的范围是- 2147483648到2147483647.无符号的范围是0到4294967295. ·INTEGER[(M)] [UNSIGNED] [ZEROFILL] 这是INT的同义词.使用两个名字只是为了简化和方便,没有本质上的区别. 查看本栏目更多精彩内容:http://www.biance

MySQL中BOOL/BOOLEAN 与 TINYINT 区别 - 测试笔记

(一) 数据类型测试 (1). 布尔类型BOOL/BOOLEAN 与 微整型TINYINT a). 创建测试表结构 root@localhost : test 05:12:49> CREATE TABLE boolean_test(ID INT NOT NULL AUTO_INCREMENT, ->                           Online_Flag BOOL, ->                           Lock_Flag BOOLEAN, -&g

浅谈MySQL存储过程中declare和set定义变量的区别_Mysql

在存储过程中常看到declare定义的变量和@set定义的变量.简单的来说,declare定义的类似是局部变量,@set定义的类似全局变量. 1.declare定义的变量类似java类中的局部变量,仅在类中生效.即只在存储过程中的begin和end之间生效. 2.@set定义的变量,叫做会话变量,也叫用户定义变量,在整个会话中都起作用(比如某个应用的一个连接过程中),即这个变量可以在被调用的存储过程或者代码之间共享数据.如何理解呢?可以看下面这个简单例子,很好理解.  (1)先执行下面脚本,创建

MySQL数据库中CHAR与VARCHAR区别介绍

在mysql数据库系统中,char和varchar是非常常见的,它们两个也非常的相似,都是用来保存相对较短的字符串,如保存文章标题.留言.email.用户名等. 二者的主要区别在于存储方式: char列长度是创建表时声明的长度而且固定不变,长度被限制在0到255之间.而varchar列中的值是可变长度字符串,长度也为0-255,在5.0.3之后长度延长到65535. 在查询显示数据的时候,char会删除字符串尾部的空格(仅仅是尾部),而varchar则完全保留这些空格.这样我们在显示char类型

MySQL中interactive_timeout和wait_timeout的区别_Mysql

在用mysql客户端对数据库进行操作时,打开终端窗口,如果一段时间没有操作,再次操作时,常常会报如下错误: ERROR 2013 (HY000): Lost connection to MySQL server during query ERROR 2006 (HY000): MySQL server has gone away No connection. Trying to reconnect... 这个报错信息就意味着当前的连接已经断开,需要重新建立连接. 那么,连接的时长是如何确认的?