Mysql 5.7 创建索引官方解读

一、环境

Mysql 5.7

二、Mysql索引创建解读

1.概述

通常我们在使用CREATE TABLE时会创建所有的索引。索引的创建对于 InnoDB 表尤其重要,其中主键决定了数据文件中行的物理布局。

CREATE INDEX是另一种添加索引的方式,针对已经创建的表添加索引。注意,CREATE INDEX这种方式是被映射到 ALTER TABLE来创建索引。而且对于PRIMARY KEY不能使用CREATE INDEX,需要使用 ALTER TABLE

InnoDB支持虚拟列的二级索引。

当启用 innodb_stats_persistent设置后,每次在 InnoDB 表上创建索引后会运行 ANALYZE TABLE 语句。

CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX index_name[index_type]ON tbl_name (key_part,...)[index_option][algorithm_option | lock_option] ...

2.key part

key_part:col_name [(length)] [ASC | DESC]

(key_part1, key_part2, ...) 形式的索引规范创建具有多个key part的索引。索引键值是通过连接给定key part的值形成的。key part可以[ASC | DESC]结尾,可能在未来扩展用于指定索引值存储的升序或降序。但目前,在代码层面[ASC | DESC]参与解析,而索引值始终按升序ASC存储。

对于String列,可以创建仅使用列的值(关键的一部分值)的索引,使用 col_name(length) 语法来指定索引前缀长度。

key part需要注意一下几点:

1)可以对 CHAR、VARCHAR、BINARY 和 VARBINARY 的key part指定前缀。

2)必须对 BLOB 和 TEXT 的key part指定前缀。此外,BLOB 和 TEXT 列只能对 InnoDB、MyISAM 和 BLACKHOLE 表建立索引。

3)前缀的长度限制以byte来衡量。但是,CREATE TABLEALTER TABLECREATE INDEX句中索引规范的前缀长度被解释为:

非二进制字符串类型(CHARVARCHARTEXT)的char的个数;

和二进制字符串类型(BINARYVARBINARYBLOB)的byte的个数。

因此,在对一个multibyte的char set(MBCS)的非二进制字符串的列指定前缀长度时,要考虑到用byte衡量。

前缀支持和前缀长度(如果支持)取决于存储引擎。例如,对于InnoDB表,前缀最长可达 767 字节,如果启用了innodb_large_prefix选项,则最长可达 3072 字节。对于MyISAM表,前缀长度限制为 1000 字节。NDB存储引擎不支持前缀。

3.Mysql创建索引的SQL

CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX index_name[index_type]ON tbl_name (key_part,...)[index_option][algorithm_option | lock_option] ...key_part:col_name [(length)] [ASC | DESC]index_option: {KEY_BLOCK_SIZE [=] value| index_type| WITH PARSER parser_name| COMMENT 'string'
}index_type:USING {BTREE | HASH}algorithm_option:ALGORITHM [=] {DEFAULT | INPLACE | COPY}lock_option:LOCK [=] {DEFAULT | NONE | SHARED | EXCLUSIVE}

4.InnoDB存储引擎支持的索引类型

InnoDB存储引擎支持的索引类型仅为BTREE。
在这里插入图片描述

5.InnoDB存储引擎的索引的特性

InnoDB存储引擎支持主键索引、唯一索引、普通索引使用BTREE的类型。但注意,对于主键索引而言,如果索引命中NULL值时,InnoDB存储引擎是不对NULL进行存储的,更不允许多个NULL值的。InnoDB存储引擎是不具备NULL和NOT NULL的索引检索。

而对于唯一索引、普通索引,如果索引命中NULL值是可行的,而且允许出现多个NULL值的情况。InnoDB存储引擎对这两种索引,是支持用索引进行NULL和NOT NULL的检索。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-otby8PzK-1656259347321)(/Users/zhanglf/Library/Application Support/typora-user-images/image-20220626234350011.png)]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/549143.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ntp时间服务解析

网络时间协议NTP(Network Time Protocol)是用于互联网中时间同步的标准互联网协议。NTP的用途是把计算机的时间同步到某些时间标准。目前采用的时间标准是世界协调时UTC(Universal Time Coordinated)。NTP的主要开发者是美国特拉华…

java循环中list.add对象的坑——后加入元素覆盖早期数据成相同值问题

原因 list.add(对象),放入的实质是对象的引用。当对象在循环外进行new后,第一次循环add对象1,第二次循环add对象2,由于放入实质是对象的引用,引用指向了对象2,故变成list里有两个对…

AspectJ切面自定义注解实现参数分组校验——基础概念(1)

AspectJ切面自定义注解实现参数分组校验——基础概念&#xff08;1&#xff09;一、环境二、validation-api源码解读2-1.Default源码解读2-2.valid源码解读2-3.Validation源码解读一、环境 maven 需要引入的依赖&#xff1a; <dependency><groupId>javax.valida…

【注册机】ColorSchemer Studio 2.1.0 注册机

下载地址&#xff1a;http://files.cnblogs.com/boringlamb/keygencs.rar转载于:https://www.cnblogs.com/boringlamb/archive/2010/09/01/1815264.html

AspectJ切面自定义注解实现参数分组校验——基础概念(2)

AspectJ切面自定义注解实现参数分组校验——基础概念&#xff08;2&#xff09;一、环境二、创建AspectJ2-1.基础概念2-2.Pointcut规则表达式2-3.切点标志符pointcut designator (PCD)1&#xff09;execution2&#xff09;within3&#xff09;this和target4&#xff09;args5&a…

5230主题下载

最近朋友买了新手机&#xff0c;可是她又是电脑白痴&#xff0c;告诉她要她用百度搜&#xff0c;硬是没找到&#xff0c;百般无奈我千挑万选&#xff0c;找到了这个网站&#xff0c;让方便也同样带给同样不知道怎么用百度的朋友了5230主题下载网址&#xff1a;http://d.958shop…

AspectJ切面自定义注解实现参数分组校验——代码实现(3)

AspectJ切面自定义注解实现参数分组校验——代码实现&#xff08;3&#xff09;一、环境1-1.备注二、代码实现2-1.注解定义2-2.组定义2-3.constraints使用2-4.切面定义2-5.复用ValidatorFactory2-6.单测校验2-7.说明一、环境 springbootmaven <dependency><groupId&…

solaris下修改 IPMP 配置

使用 IPMP 配置文件 /etc/default/mpathd 为 IPMP 组配置以下系统范围的参数。 FAILURE_DETECTION_TIME TRACK_INTERFACES_ONLY_WITH_GROUPS FAILBACK 如何配置 /etc/default/mpathd 文件 在具有 IPMP 组配置的系统上&#xff0c;承担主管理员角色或成为超级用户。 主管理员角色…

电力自动化及继电保护实验室规章制度

为了按时完成电力自动化及继电保护实验&#xff0c;确保实验时人身安全与设备安全&#xff0c;要严格遵守如下规定的安全操作规程 一、 仔细阅读实验指导书内容&#xff0c;严格按实验指导书中的步骤来做试验。 二、 实验时&#xff0c;人体不可接触带电线路。 三、 接线或拆线…

主板跳线连接技巧图解

作为一名新手&#xff0c;要真正从头组装好自己的电脑并不容易&#xff0c;也许你知道CPU应该插哪儿&#xff0c;内存应该插哪儿&#xff0c;但遇到一排排复杂跳线的时候&#xff0c;很多新手都不知道如何下手。 钥匙开机其实并不神秘 还记不记得你第一次见到装电脑的时候…

几个不同的概念

站点 虚拟目录2个是不同德概念。站点需要应用程序池去生效。转载于:https://blog.51cto.com/vaxvax0000/390912

VMWARE双机安装说明

详见附件。 开始创建第一台机器&#xff1a;WIN2003 NODE1这里虚拟硬盘可以尽量选择大点,然后点“完成”进行创建就OK了。配置NODE1&#xff1a;把内存调整到256M以上&#xff0c;然后点“Add”增加一块网卡&#xff1a;网卡添加完后&#xff0c;再点“Add” 添加共享磁盘&…

GridView 中 Bind和Eval的区别详解

Eval()方法在运行时使用反射执行后期绑定计算&#xff0c;因此与标准的ASP.NET数据绑定方法bind相比&#xff0c;会导致性能明显下降。它一般用在绑定时需要格式化字符串的情况下。多数情况尽量少用此方法 Eval 方法是静态&#xff08;只读&#xff09;方法&#xff0c;该方法采…

为什么每个线程都需要创建一个栈?

有四个函数A、B、C、D&#xff0c;地址分别为100、200、300、400&#xff1b;有两个线程同时执行&#xff1b; 1&#xff09;假如只有一个栈 函数A在线程1中执行的时候&#xff0c;调用了函数B&#xff0c;将函数A中下一条指令的地址入栈&#xff08;104&#xff09;&#xff…

创建线程时,需要创建的内容

请参看文献&#xff1a;线程调度&#xff0c;这样就能明白为什么需要有TCB&#xff0c;栈等&#xff1b; 创建线程时&#xff0c;需要初始化的参数&#xff1a; void ThreadCreate(A){TCB *tcbmalloc(); //申请一段内存作为TCB* stackmalloc(); //申请一段内存作为栈* st…

莎士比亚,肯尼迪总统,孔子,奥巴马总统,马克吐温,梵高,比尔盖茨等13位名人阔谈微博(中英双语版本)...

2019独角兽企业重金招聘Python工程师标准>>> 作者: ganzhijie 发表于 2010-09-02 10:11 原文链接 阅读: 21 评论: 0 John F. Kennedy-“Ask not what your twitter can do for you, ask what you can do for your twitter.”肯尼迪总统-“不要问你的微博能为你做些什…

Scala中=gt;的用法

1.匿名函数 (x: Int) > x 1这一部分就是一个匿名函数&#xff0c;我这里使用了一个变量anonymousFun代替了这个匿名函数方便测试调用&#xff1b;>左边是参数和参数类型&#xff0c;而>右边是函数体&#xff0c;并没有函数名。 val anonymousFun (x: Int) > x …

sql server 游标的使用

1 --zhxia2 DECLAREusernameVARCHAR(20),flagBIT,ncountint3 DECLAREmycursor CURSORFOR--声明游标4 SELECTuser_nameFROMRBAC_User5 OPENmycursor --打开游标6 SETflag07 SETncount08 WHILE(flag0)9 BEGIN10 SETncountncount111 FETCHmycursor INTOusername--循环读取游标12 I…

续——《RedHat/Fedora等非ubuntu的Linux系统星空极速netkeeper拨号上网 》

小补充&#xff0c;在上一篇转载的文章中《RedHat/Fedora等非ubuntu的Linux系统星空极速netkeeper拨号上网》中提到&#xff5b;方法一&#xff0c;Debian下突破星空极速拨号用了一个“pon”命令&#xff0c;完整的拨号命令是“pon dsl-provider”&#xff0c;&#xff5d;&…

Java中Thread类的方法简介

1.新建线程 Thread t1 new Thread(); t1.start(); 新建线程&#xff0c;应该调用start()方法启动线程&#xff1b;如果直接调用run()方法&#xff0c;该方法也会执行&#xff0c;但会被当做一个普通的方法&#xff0c;在当前线程中顺序执行&#xff1b;而如果使用start()方法…