索引的操作_【0,0,0】怎么进行索引-程序员宅基地

技术标签: 运维  linux  服务器  

一、学习任务1:为什么使用索引

在MySQL数据库中,数据库对象表是存储和操作数据的逻辑结构,而本章所要介绍的数据库对象索引则是一种有效组合数据的方式.通过索引对象,可以快速查询到数据库对象表中的特定记录,是一种提高性能的常用方式。

一个索引会包含表中按照一定顺序排序的一列或多列字段。索引的操作包含创建索引、修改索引和删除索引,这些操作是MySQL软件中最基本、最重要的操作。

为什么使用索引?

数据库对象索引其实与书的目录非常类似,主要是为了提高从表中检索数据的速度。由于数据存储在数据库表中,所以索引是创建在数据库表对象上的,由表中的一个字段或多个字段生成的键组成,这些键存储在数据结构B-树或哈希表)中,通过MySQL可以快速有效地查找与键值相关联的字段。根据索引的存储类型,可以将索引分为B型树索引BTREE)和哈希索引HASH)

注意:InnoDBMyISAM存储引擎支持BTREE类型索引MEMORY存储引擎支持HASH 类型索引默认为前者索引.

数据库对象索引的出现,除了可以提高数据库管理系统的查找速度,而且还可以保证字段的唯一性,从而实现数据库表的完整性。查看帮助文档,可以发现MySQL支持6种索引,它们分别为普通索引、唯一索引、全文索引、单列索引、多列索引和空间索引。

索引的创建有利有弊,创建索引可以提高查询速度,但过多的创建索引则会占据许多的磁盘空间。因此在创建索引之前,必须权衡利弊。

以下情况下适合创建索引:

经常被查询的字段,即在WHERE子句中出现的字段。

在分组的字段,即在GROUP BY子句中出现的字段。

存在依赖关系的子表和父表之间的联合査询,即主键或外键字段。

设置唯一完整性约束的字段。

以下情况下,不适合创建索引:

在查询中很少被使用的字段。

拥有许多重复值的字段。

二、学习任务2:创建索引

索引的操作包括创建索引、查看索引和删除索引。所谓创建索引,就是在表的一个字段或多个字段上建立索引,本节将详细介绍如何创建索引。在MySQL中,可以通过三种方式来创建索引,分别为创建表时创建索引、在已经存在的表上创建索引和通过SQL语句ALTER TABLE创建索引。

2.1 创建普通索引

所谓普通索引,就是在创建索引时,不附加任何限制条件(唯一、非空等限制)。该类型的索引可以创建在任何数据类型的字段上,

1创建表时创建普通索引

MySQL数据库管理系统中创建普通索引通过SQL语句INDEX来实现, 其语法形式如下:

CREATE TABLE table_name (属性名 数据类型属性名 数据类型……属性名 数据类型

INDEX | KEY【索引名】属性名1(长度)ASC|DESC;

上述语句中,INDEXKEY参数用来指定字段为索引,索引名参数用来指定所创建索引名, 属性名1参数用来指定索引所关联的字段的名称,长度参数用来指定索引的长度,ASC参数用来指定为升序排序,DESC参数用来指定为降序排序。

注意:在创建索引时,可以指定索引的长度.这是因为不同存储引擎定义了表的最大索引数和最大索引长度。

MySQL所支持的存储引擎对每个表至少支持16个索引,总索引长度至少为256字节。

2在已经存在的表上创建普通索引

MySQL数据库管理系统中创建普通索引除了通过SQL语句INDEX来实现外,还可以通过SQL语句INDEX来实现,其语法形式如下:

CREATE INDEX 索引名ON 表名(属性长度)ASC|DESC】);

在上述语句中CREATE INDEX关键字用来创建索引索引名参数用来指定所创建索引名 ON关键字用来指定所要创建索引的表名称。至于其他内容,则与创建表时创建普通索引”的语法一致。

3、通过SQL语句ALTER TABLE创建普通索引

除了上述两种方式来创建普通索引外,在MySQL数据库管理系统中创建普通索引还可以通过SQL语句ALTER来实现,其语法形式如下:

ALTER TABLE table_name ADD INDEX | KEY索引名属性名【长度ASC|DESC】);

在上述语句中INDEXKEY关键字用来指定创建普通索引索引名参数用来指定所创建索引名,属性名参数用来指定索引所关联的字段的名称长度参数用来指定索引的长度,“ASC”参数用来指定为升序排序DESC参数用来指定为降序排序。

2.2 创建唯一索引

所谓唯一索引,就是在创建索引时,限制索引的值必须是唯一的。通过该类型的索引可以更快速地查询某条记录。在MySQL中,根据创建索引方式,可以分为自动索引和手动索引两种。

所谓自动索引,是指在数据库表里设置完整性约束时,该表会被系统自动创建索引。所谓手动索引,是指手动在表上创建索引。当设置表中的某个字段设置主键或唯一完整性约束时,系统就会自动创建关联该字段的唯一索引,

1创建表时创建唯一索引

MySQL数据库管理系统中创建唯一索引通过SQL语句UNIQUE INDEX 来实现其语法形式如下

CREATE TABLE table_name (属性名 数据类型属性名 数据类型……属性名 数据类型UNIQUE INDEXKEY【索引名(属性名1长度)】ASCDESC));

在上述语句中比创建普通索引多了一个SQL关键字UNIQUE,其中UNIQUE INDEX UNIQUE KEY表示创建唯一索引。

2在已经存在的表上创建唯一索引

MySQL数据库管理系统中创建唯一索引除了通过SQL语句UNIQUE INDEX来实现外还可以通过SQL语句CREATE UNIQUE INDEX来实现其语法形式如下

CREATE UNIQUE INDEX 索引名ON表名 (属性名【长度ASC|DESCl)

在上述语句中CREATE UNIQUE INDEX关键字用来创建唯一索引。

3通过SQL语句ALTER TABLE创建唯一索引

除了用上述两种方式来创建唯一索引外,在MySQL数据库管理系统中创建唯一索引还可以通过SQL语句ALTER来实现,其语法形式如下:

ALTER TABLE table_name ADD UNIQUE INDEX|KEY索引名属性名【长度ASC|DESC】)

在上述语句中UNIQUE INDEXKEY关键字用来指定创建唯一索引索引名参数用来指定所创建索引名属性名参数用来指定索引所关联的字段的名称长度参数用来指定索引的长度ASC参数用来指定为升序排序DESC参数用来指定为降序排序。

2.3 创建全文索引

全文索引主要关联在数据类型为CHARVARCHARTEXT的字段上,以便能够更加快速地查询数据量较大的字符串类型的字段。

MySQL3.23.23版本开始支持全文索引,只能在存储引擎为MyISAM的数据库表上创建全文索引。在默认情况下,全文索引的搜索执行方式为不区分大小写,如果全文索引所关联的字段为二进制数据类型,则以区分大小写的搜索方式执行。

1创建表时创建全文索引

MySQL数据库管理系统中创建全文索引通过SQL语句FULLTEXT INDEX来实现,其语法形式如下:

CREATE TABLE table_name (属性名 数据类型属性名 数据类型……

属性名 数据类型

FULLTEXT INDEX|KEY【索引名】属性名1(长度)】ASCIDESC】))

在上述语句中比创建普通索引多了一个SQL关键字FULLTEXT,其中FULLTEXT INDEX FULLTEXT KEY表示创建全文索引。

2在已经存在的表上创建全文索引

MySQL数据库管理系统中创建全文索引除了通过SQL语句FULLTEXT INDEX来实现外还可以通过SQL语句CREATE FULLTEXT INDEX来实现其语法形式如下

CREATE FULLTEXT INDEX 索引名ON表名 (属性名【(长度)】ASC|DESC);

在上述语句中CREATE FULLTEXT INDEX关键字表示用来创建全文索引。

3通过SQL语句ALTER TABLE创建全文索引

除了上述两种方式来创建全文索引外,在MySQL数据库管理系统中创建全文索引还可以通过SQL语句ALTER来实现,其语法形式如下:

ALTER TABLE table_name ADD FULLTEXT INDEX|KEY索引名属性名【长度)ASC|DESC】)

在上述语句中FULLTEXT INDEXKEY关键字用来指定创建全文索引索引名参数用来指定所创建索引名属性名参数用来指定索引所关联的字段的名称长度参数用来指定索引的长度ASC参数用来指定为升序排序DESC参数用来指定为降序排序。

2.4 创建多列索引

所谓多列索引,是指在创建索引时,所关联的字段不是一个字段,而是多个字段。虽然可以通过所关联的字段进行查询,但是只有査询条件中使用了所关联字段中的第一个字段,多列索引才会 被使用。

1创建表时创建多列索引

MySQL数据库管理系统中创建全文索引是通过SQL语句D^DEX来实 现的,其语法形式如下:

CREATE TABLE table_name (

属性名 数据类型属性名 数据类型……

属性名 数据类型

INDEX|KEY【索引名】属性名1长度ASC|DESC】,……

属性 n 【(长度)】【ASC|DESC】));

在上述语句中创建索引时所关联的字段至少大于一个字段。

2、在已经存在的表上创建多列索引

在MySQL数据库管理系统中创建全文索引,除了可以在创建表时实现外, 还可以为已经存在的表设置全文索引,其语法形式如下:

CREATE INDEX 索引名 ON 表名(属性名【(长度)】ASC|DESC】,……

属性名n【(长度)】【ASC|DESC);

在上述语句中比创建普通索引多关联了几个字段。

3通过SQL语句ALTER TABLE创建多列索引

除了上述两种方式来创建多列索引外,在MySQL数据库管理系统中创建多列索引还可以通过SQL语句ALTER来实现,其语法形式如下:

ALTER TABLE table_name ADD INDEX|KEY索引名属性名【(长度)ASCIDESC,

属性名n (长度ASC|DESCl)

在上述语句中,INDEXKEY关键字用来指定创建索引,由于所涉及的字段为多个,所以创建为多列索引。

三、学习任务3:删除索引

索引的操作包括创建索引、查看索引和删除索引。所谓删除索引,就是删除表中己经创建的索引。之所以要删除索引,是由于这些索引会降低表的更新速度,影响数据库的性能,本节将详细介绍如何删除索引。

删除索引的语法形式

MySQL数据库管理系统中删除索引通过SQL语句DROP INDEX来实现,其语法形式如下:

DROP INDEX index_name ON table_name

在上述语句中index_name参数表示所要删除的索引名字table_name参数表示所要刪除索 所在的表对象。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Albert__Einstein/article/details/121389874

智能推荐

攻防世界_难度8_happy_puzzle_攻防世界困难模式攻略图文-程序员宅基地

文章浏览阅读645次。这个肯定是末尾的IDAT了,因为IDAT必须要满了才会开始一下个IDAT,这个明显就是末尾的IDAT了。,对应下面的create_head()代码。,对应下面的create_tail()代码。不要考虑爆破,我已经试了一下,太多情况了。题目来源:UNCTF。_攻防世界困难模式攻略图文

达梦数据库的导出(备份)、导入_达梦数据库导入导出-程序员宅基地

文章浏览阅读2.9k次,点赞3次,收藏10次。偶尔会用到,记录、分享。1. 数据库导出1.1 切换到dmdba用户su - dmdba1.2 进入达梦数据库安装路径的bin目录,执行导库操作  导出语句:./dexp cwy_init/[email protected]:5236 file=cwy_init.dmp log=cwy_init_exp.log 注释:   cwy_init/init_123..._达梦数据库导入导出

js引入kindeditor富文本编辑器的使用_kindeditor.js-程序员宅基地

文章浏览阅读1.9k次。1. 在官网上下载KindEditor文件,可以删掉不需要要到的jsp,asp,asp.net和php文件夹。接着把文件夹放到项目文件目录下。2. 修改html文件,在页面引入js文件:<script type="text/javascript" src="./kindeditor/kindeditor-all.js"></script><script type="text/javascript" src="./kindeditor/lang/zh-CN.js"_kindeditor.js

STM32学习过程记录11——基于STM32G431CBU6硬件SPI+DMA的高效WS2812B控制方法-程序员宅基地

文章浏览阅读2.3k次,点赞6次,收藏14次。SPI的详情简介不必赘述。假设我们通过SPI发送0xAA,我们的数据线就会变为10101010,通过修改不同的内容,即可修改SPI中0和1的持续时间。比如0xF0即为前半周期为高电平,后半周期为低电平的状态。在SPI的通信模式中,CPHA配置会影响该实验,下图展示了不同采样位置的SPI时序图[1]。CPOL = 0,CPHA = 1:CLK空闲状态 = 低电平,数据在下降沿采样,并在上升沿移出CPOL = 0,CPHA = 0:CLK空闲状态 = 低电平,数据在上升沿采样,并在下降沿移出。_stm32g431cbu6

计算机网络-数据链路层_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输-程序员宅基地

文章浏览阅读1.2k次,点赞2次,收藏8次。数据链路层习题自测问题1.数据链路(即逻辑链路)与链路(即物理链路)有何区别?“电路接通了”与”数据链路接通了”的区别何在?2.数据链路层中的链路控制包括哪些功能?试讨论数据链路层做成可靠的链路层有哪些优点和缺点。3.网络适配器的作用是什么?网络适配器工作在哪一层?4.数据链路层的三个基本问题(帧定界、透明传输和差错检测)为什么都必须加以解决?5.如果在数据链路层不进行帧定界,会发生什么问题?6.PPP协议的主要特点是什么?为什么PPP不使用帧的编号?PPP适用于什么情况?为什么PPP协议不_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输

软件测试工程师移民加拿大_无证移民,未受过软件工程师的教育(第1部分)-程序员宅基地

文章浏览阅读587次。软件测试工程师移民加拿大 无证移民,未受过软件工程师的教育(第1部分) (Undocumented Immigrant With No Education to Software Engineer(Part 1))Before I start, I want you to please bear with me on the way I write, I have very little gen...

随便推点

Thinkpad X250 secure boot failed 启动失败问题解决_安装完系统提示secureboot failure-程序员宅基地

文章浏览阅读304次。Thinkpad X250笔记本电脑,装的是FreeBSD,进入BIOS修改虚拟化配置(其后可能是误设置了安全开机),保存退出后系统无法启动,显示:secure boot failed ,把自己惊出一身冷汗,因为这台笔记本刚好还没开始做备份.....根据错误提示,到bios里面去找相关配置,在Security里面找到了Secure Boot选项,发现果然被设置为Enabled,将其修改为Disabled ,再开机,终于正常启动了。_安装完系统提示secureboot failure

C++如何做字符串分割(5种方法)_c++ 字符串分割-程序员宅基地

文章浏览阅读10w+次,点赞93次,收藏352次。1、用strtok函数进行字符串分割原型: char *strtok(char *str, const char *delim);功能:分解字符串为一组字符串。参数说明:str为要分解的字符串,delim为分隔符字符串。返回值:从str开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。其它:strtok函数线程不安全,可以使用strtok_r替代。示例://借助strtok实现split#include <string.h>#include <stdio.h&_c++ 字符串分割

2013第四届蓝桥杯 C/C++本科A组 真题答案解析_2013年第四届c a组蓝桥杯省赛真题解答-程序员宅基地

文章浏览阅读2.3k次。1 .高斯日记 大数学家高斯有个好习惯:无论如何都要记日记。他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?高斯出生于:1777年4月30日。在高斯发现的一个重要定理的日记_2013年第四届c a组蓝桥杯省赛真题解答

基于供需算法优化的核极限学习机(KELM)分类算法-程序员宅基地

文章浏览阅读851次,点赞17次,收藏22次。摘要:本文利用供需算法对核极限学习机(KELM)进行优化,并用于分类。

metasploitable2渗透测试_metasploitable2怎么进入-程序员宅基地

文章浏览阅读1.1k次。一、系统弱密码登录1、在kali上执行命令行telnet 192.168.26.1292、Login和password都输入msfadmin3、登录成功,进入系统4、测试如下:二、MySQL弱密码登录:1、在kali上执行mysql –h 192.168.26.129 –u root2、登录成功,进入MySQL系统3、测试效果:三、PostgreSQL弱密码登录1、在Kali上执行psql -h 192.168.26.129 –U post..._metasploitable2怎么进入

Python学习之路:从入门到精通的指南_python人工智能开发从入门到精通pdf-程序员宅基地

文章浏览阅读257次。本文将为初学者提供Python学习的详细指南,从Python的历史、基础语法和数据类型到面向对象编程、模块和库的使用。通过本文,您将能够掌握Python编程的核心概念,为今后的编程学习和实践打下坚实基础。_python人工智能开发从入门到精通pdf

推荐文章

热门文章

相关标签