MySQL查看、创建和删除索引的方法分享

2023-11-19

这篇文章主要介绍了MySQL查看、创建和删除索引的方法,结合实例形式较为详细的分析了MySQL中索引的作用,以及查看、创建及删除索引的相关实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下

本文实例讲述了MySQL查看、创建和删除索引的方法。分享给大家供大家参考。具体如下:

1.索引作用

在索引列上,除了上面提到的有序查找之外,数据库利用各种各样的快速定位技术,能够大大提高查询效率。特别是当数据量非常大,查询涉及多个表时,使用索引往往能使查询速度加快成千上万倍。

例如,有3个未索引的表t1、t2、t3,分别只包含列c1、c2、c3,每个表分别含有1000行数据组成,指为1~1000的数值,查找对应值相等行的查询如下所示。

SELECT c1,c2,c3 FROM t1,t2,t3 WHERE c1=c2 AND c1=c3
此查询结果应该为1000行,每行包含3个相等的值。在无索引的情况下处理此查询,必须寻找3个表所有的组合,以便得出与WHERE子句相配的那些行。而可能的组合数目为1000×1000×1000(十亿),显然查询将会非常慢。

如果对每个表进行索引,就能极大地加速查询进程。利用索引的查询处理如下。

(1)从表t1中选择第一行,查看此行所包含的数据。
(2)使用表t2上的索引,直接定位t2中与t1的值匹配的行。类似,利用表t3上的索引,直接定位t3中与来自t1的值匹配的行。
(3)扫描表t1的下一行并重复前面的过程,直到遍历t1中所有的行。

在此情形下,仍然对表t1执行了一个完全扫描,但能够在表t2和t3上进行索引查找直接取出这些表中的行,比未用索引时要快一百万倍。
利用索引,MySQL加速了WHERE子句满足条件行的搜索,而在多表连接查询时,在执行连接时加快了与其他表中的行匹配的速度。

2.  创建索引

在执行CREATE TABLE语句时可以创建索引,也可以单独用CREATE INDEX或ALTER TABLE来为表增加索引。

1.ALTER TABLE

ALTER TABLE用来创建普通索引、UNIQUE索引或PRIMARY KEY索引。

1

2

3

ALTER TABLE table_name ADD INDEX index_name (column_list)

ALTER TABLE table_name ADD UNIQUE (column_list)

ALTER TABLE table_name ADD PRIMARY KEY (column_list)

其中table_name是要增加索引的表名,column_list指出对哪些列进行索引,多列时各列之间用逗号分隔。索引名index_name可选,缺省时,MySQL将根据第一个索引列赋一个名称。另外,ALTER TABLE允许在单个语句中更改多个表,因此可以在同时创建多个索引。

2.CREATE INDEX

CREATE INDEX可对表增加普通索引或UNIQUE索引。

1

2

CREATE INDEX index_name ON table_name (column_list)

CREATE UNIQUE INDEX index_name ON table_name (column_list)

table_name、index_name和column_list具有与ALTER TABLE语句中相同的含义,索引名不可选。另外,不能用CREATE INDEX语句创建PRIMARY KEY索引。

3.索引类型

在创建索引时,可以规定索引能否包含重复值。如果不包含,则索引应该创建为PRIMARY KEY或UNIQUE索引。对于单列惟一性索引,这保证单列不包含重复的值。对于多列惟一性索引,保证多个值的组合不重复。

PRIMARY KEY索引和UNIQUE索引非常类似。事实上,PRIMARY KEY索引仅是一个具有名称PRIMARY的UNIQUE索引。这表示一个表只能包含一个PRIMARY KEY,因为一个表中不可能具有两个同名的索引。

下面的SQL语句对students表在sid上添加PRIMARY KEY索引。

代码如下:

ALTER TABLE students ADD PRIMARY KEY (sid)

4.  删除索引

可利用ALTER TABLE或DROP INDEX语句来删除索引。类似于CREATE INDEX语句,DROP INDEX可以在ALTER TABLE内部作为一条语句处理,语法如下。

1

2

3

DROP INDEX index_name ON talbe_name

ALTER TABLE table_name DROP INDEX index_name

ALTER TABLE table_name DROP PRIMARY KEY

其中,前两条语句是等价的,删除掉table_name中的索引index_name。
第3条语句只在删除PRIMARY KEY索引时使用,因为一个表只可能有一个PRIMARY KEY索引,因此不需要指定索引名。如果没有创建PRIMARY KEY索引,但表具有一个或多个UNIQUE索引,则MySQL将删除第一个UNIQUE索引。
如果从表中删除了某列,则索引会受到影响。对于多列组合的索引,如果删除其中的某列,则该列也会从索引中删除。如果删除组成索引的所有列,则整个索引将被删除。

5.查看索引

1

2

mysql> show index from tblname;

mysql> show keys from tblname;

· Table
表的名称。
· Non_unique
如果索引不能包括重复词,则为0。如果可以,则为1。
· Key_name
索引的名称。
· Seq_in_index
索引中的列序列号,从1开始。
· Column_name
列名称。
· Collation
列以什么方式存储在索引中。在MySQL中,有值‘A'(升序)或NULL(无分类)。
· Cardinality
索引中唯一值的数目的估计值。通过运行ANALYZE TABLE或myisamchk -a可以更新。基数根据被存储为整数的统计数据来计数,所以即使对于小型表,该值也没有必要是精确的。基数越大,当进行联合时,MySQL使用该索引的机会就越大。
· Sub_part
如果列只是被部分地编入索引,则为被编入索引的字符的数目。如果整列被编入索引,则为NULL。
· Packed
指示关键字如何被压缩。如果没有被压缩,则为NULL。
· Null
如果列含有NULL,则含有YES。如果没有,则该列含有NO。
· Index_type
用过的索引方法(BTREE, FULLTEXT, HASH, RTREE)。
· Comment

来源:微点阅读  https://www.weidianyuedu.com

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL查看、创建和删除索引的方法分享 的相关文章

  • java库维护数据库结构

    我的应用程序一直在开发 所以偶尔 当版本升级时 需要创建 更改 删除一些表 修改一些数据等 通常需要执行一些sql代码 是否有一个 Java 库可用于使我的数据库结构保持最新 通过分析类似 db structure version 信息并执
  • 根据由另一列分组的不同列的最大值获取值[重复]

    这个问题在这里已经有答案了 我想根据由另一列分组的不同列的最大值来获取列的值 我有这张表 KEY NUM VAL A 1 AB B 1 CD B 2 EF C 2 GH C 3 HI D 1 JK D 3 LM 并想要这样的结果 KEY V
  • “pdo_mysql”已禁用,我无法启用它。我在 iMac 7.1 OSX 10.6.8 上安装了 MAMP v. 3.0.4

    pdo mysql 已禁用 我无法启用它 我在 iMac 7 1 OSX 10 6 8 上安装了 MAMP v 3 0 4 在我的 phpinfo 页面上 我可以看到唯一启用的 PDO 是 sqlite 如果我查看 php 5 5 10 扩
  • 一个表可以有多个主键吗?

    我现在很困惑 也许你可以帮助我更好地理解这个问题 即一个表可以有两个主键 如果是 那么如何 如果没有 那为什么 您询问是否可以有多个主键field你当然可以 您只能有一个主键 但它可以包含唯一标识行所需的任意数量的列 创建表时使用类似这样的
  • 需要 SQL 查询澄清[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有一个由以下列组成的表 billid patientid doctorid fees 如何显示治疗多名患者的医生 尝试了以下代码并得到了
  • 如何使用wireshark清晰捕获mysql查询sql

    因为我们使用远程开发Mysql服务器 所以不能轻易检查查询sql 如果使用本地服务器可以tail f general log file查看调用某个http接口时执行了哪些sql 所以我安装了一个wireshark捕获这些从本地发送的查询sq
  • 如何将 MySQL 查询输出保存到 Excel 或 .txt 文件? [复制]

    这个问题在这里已经有答案了 如何将 MySQL 查询的输出保存到 MS Excel 工作表 即使只能将数据存储在 txt文件 就可以了 From 将 MySQL 查询结果保存到文本或 CSV 文件中 http www tech recipe
  • NVARCHAR 变量在Where 子句中不起作用

    在 SQL Server 我想是 2018 我不知道如何判断 中 我的变量不起作用WHERE的条款NVARCHAR 比较应该返回值 但它什么也没返回 如果我只是手动输入声明的文本 它会突然起作用并返回值 没有任何逻辑原因应该有任何不同 类型
  • 如何将SQL数据加载到Hortonworks中?

    我已在我的电脑中安装了 Hortonworks SandBox 还尝试使用 CSV 文件 并以表结构的方式获取它 这是可以的 Hive Hadoop nw 我想将当前的 SQL 数据库迁移到沙箱 MS SQL 2008 r2 中 我将如何做
  • 无法在 .net core 2 中从 MySQL 构建“日期”类型列

    我已经开始了一个新的 net core 2 项目 我正在尝试将 MySQL 数据库导入实体框架 我使用此命令来搭建数据库 Scaffold DbContext server localhost port 3306 user id user
  • 在 django ORM 中查询时如何将 char 转换为整数?

    最近开始使用 Django ORM 我想执行这个查询 select student id from students where student id like 97318 order by CAST student id as UNSIG
  • 在MySQL中生成随机字符串

    我正在尝试使用函数在 phpmyadmin 中获取随机字符串 我有以下代码 CREATE FUNCTION randomPassword RETURNS varchar 128 BEGIN SET chars ABCDEFGHIJKLMNO
  • AWS RDS MySql - 如何在设置“公开可用”后允许访问

    刚刚使用默认设置和用户 密码创建了新的 AWS RDS MySql 实例 我也将其设置为publicly available并在此过程中创建新的 VPC 目前无法从我的笔记本电脑连接到此 RDS mysql h endpoint u myu
  • 将布尔参数传递给 SQL Server 存储过程

    我早些时候问过这个问题 我以为我找到了问题所在 但我没有 我在将布尔参数传递给存储过程时遇到问题 这是我的 C 代码 public bool upload false protected void showDate object sende
  • 无法在 mysql-apt-config [Ubuntu 14.04] 中选择“确定”

    我使用的是 Ubuntu 14 04 sudo apt get update总是给我这个选项来配置 mysql apt config 我尝试选择版本 按 tab gt 在 确定 上突出显示的键 按 Enter 但没有任何反应 它再次返回并突
  • 如何使用原始 SQL 查询实现搜索功能

    我正在创建一个由 CS50 的网络系列指导的应用程序 这要求我仅使用原始 SQL 查询而不是 ORM 我正在尝试创建一个搜索功能 用户可以在其中查找存储在数据库中的书籍列表 我希望他们能够查询 书籍 表中的 ISBN 标题 作者列 目前 它
  • WHERE NOT EXIST 附近的语法错误

    我在堆栈中搜索 但没有一个达到最终答案 我的查询是这样的 INSERT INTO user username frequence autoSend VALUES feri2 3 1 WHERE NOT EXISTS SELECT FROM
  • 插入记录后如何从SQL Server获取Identity值

    我在数据库中添加一条记录identity价值 我想在插入后获取身份值 我不想通过存储过程来做到这一点 这是我的代码 SQLString INSERT INTO myTable SQLString Cal1 Cal2 Cal3 Cal4 SQ
  • Oracle:按月分区表

    我的解决方案 德语几个月 PARTITION BY LIST to char GEBURTSDATUM Month PARTITION p1 VALUES JANUAR PARTITION p2 VALUES Februar PARTITI
  • 在同一查询中选择 Count of ip 和 Count of DISTINCT ip

    我有一个这样的表结构 TABLE NAME counter id datetime url ip 1 2013 04 12 13 27 09 url1 ip01 2 2013 04 13 10 55 43 url2 ip02 3 2013

随机推荐

  • UnitBox:一种先进的目标检测网络

    UnitBox 一种先进的目标检测网络 摘要 1 简介 2 IOU损耗层 2 1 L2损失层 2 2 IoU损耗层 正向 2 3 IoU损耗层 向后 3 单元箱网络 4 实验 4 1 IoU损失的有效性 4 2单元箱性能 5 结论 原文 U
  • 网站开发之HTML基础知识及超链接(二)

    前面的文章我讲述了HTML的基础知识 包括 1 JSP前段设计及HTML基础介绍 2 HTML常用标记符 HEAD HTML属性 BODY设置背景 注释 FONT B I U 3 HTML设置段落格式 分段P 换行BR 标题样式Hn HR
  • Element Dialog水平垂直居中样式

    前言 Element UI 是目前最火的前端Vue js UI组件库 但是Dialog默认样式并不是水平垂直居中 这就很让人很尴尬 不过对于有水平垂直居中的需求来说 我们是可以自己进行调整的 最常用的方法也试过了 最终得到以下方法是最佳的
  • 关于C++函数返回值的使用方式以及局部对象何时析构的问题

    关于C 局部对象何时析构的探讨 我之前一直笼统的认为局部在函数调用结束之后 所有的局部变量会立刻析构 经过仔细分析之后才发现还有很多细节 这里对比了函数返回值的使用 Test t t fun 赋值 和 Test t fun 初始化 假设有一
  • html5 实现坦克大战,HTML5实现坦克大战(一)

    方法 MoveUp 坦克上移 MoveDown 坦克下移 MoveRight 坦克右移 MoveLeft 坦克左移 MyTank extends Tank EnemeyTank extends Tank Bullet Tank 字段 x y
  • 2023最新骚扰电话查询接口

    一 原始方法注入数据 初始化方法 constructor token this token Z1QljZOZiT4NTG 请求地址 this req url http api txapi cn v1 c nuisance calls que
  • Redis系列二

    1 4 Redis基础知识 1 4 1 默认数据库 Redis默认数据库数量有16个 redis conf配置文件可查看 默认使用的数据库为0 1 4 2 切换数据库 使用select 命令进行切换 root yunmx bin redis
  • C++ 信号处理

    信号是由操作系统传给进程的中断 会提早终止一个程序 在 UNIX LINUX Mac OS X 或 Windows 系统上 可以通过按 Ctrl C 产生中断 有些信号不能被程序捕获 但是下表所列信号可以在程序中捕获 并可以基于信号采取适当
  • ytb网站报错 “您没有联网,请检查网络连接”

    问题原因 解决办法 计算机时间有问题 在设置中 同步 时间 并且关闭路由器的Ipv6以绝后患 xxxxxxx com core proxy vmess encoding failed to read response header gt w
  • Matlab与VC混合编程之一

    Matlab与VC混合编程之一 1 问题的提出 为什么需要用Matlab与VC混合编程 做工程项目时用的是VC 经常会用到科学计算的相关算法 比如矩阵求逆 求行列式 求微分方程组初值问题的数值解等问题 如果自己去编写相关的函数 首先需要去找
  • windows线程调度、线程优先级和亲缘性

    windows线程调度 线程优先级和亲缘性 每一个线程在它的线程内核对象中有一个上下文结构 反映了线程最后一次执行的 CPU 寄存器状态 每隔大约 20ms 可以使用 GetSystemTimeAdjustment 获得 我测得这个间隔大约
  • android调节系统音量之修改默认音量、最大音量和最小音量

    Android系统拥有多种声音属性 包括有多媒体 通话 通知等声音属性 这些声音属性分别含有自己默认音量 最大音量和最小音量属性 下面我将介绍一下这些声音属性的音量定义和它们的修改方式 默认音量 系统声音的默认音量定义在 framework
  • ZCMU--2219: Toy Army(C语言)

    The hero of our story Valera and his best friend Arcady are still in school and therefore they spend all the free time p
  • SpringBoot 接受文件和对象

    SpringBoot 接受文件和对象 使用场景 某个接口 需要同时接受文件和实体 也就是参数 一 这个时候 前端就不能 json 格式传送数据了 要用到 multipart form data 这种格式传送数据 二 那么 这个时候 后端应该
  • Java抛出自定义异常,报java.lang.reflect.UndeclaredThrowableException: null的错误

    最近项目中使用了自定义异常 并做了全局异常处理 抛出异常的代码如下 throw new FebsException 系统管理员不能修改颜色 结果运行后 报java lang reflect UndeclaredThrowableExcept
  • 前端开发时常用的第三方工具库

    前端开发时常用的第三方工具库 JavaScript 实用工具库 一 lodash 1 官方文档 中文文档 https www lodashjs com 2 简介及使用场景 Lodash 是一个一致性 模块化 高性能的 JavaScript
  • windows sqlite可视化工具sqlitestudio下载、安装、使用

    1 下载地址 https sqlitestudio pl index rvt 2 使用 选择数据库 gt 添加数据库 gt 选择你的本地数据库 并点击 增加就可以查看数据库了
  • 浅谈Buffer

    什么是Buffer 在 Node js 中 Buffer 类是随 Node 内核一起发布的核心库 Buffer 库为 Node js 带来了一种存储原始数据的方法 可以让 Node js 处理二进制数据 global Buffer gt f
  • 爬虫小白也能玩转!Python爬虫中的异常处理与网络请求优化

    大家好 我是来自爬虫世界的小编 今天 我要和大家分享一些关于Python爬虫中的异常处理和网络请求优化的经验 不论你是初学者还是有一定经验的爬虫程序员 我相信这些实用的技巧和代码示例都能为你在爬取数据的过程中带来方便和效率 1 异常处理 保
  • MySQL查看、创建和删除索引的方法分享

    这篇文章主要介绍了MySQL查看 创建和删除索引的方法 结合实例形式较为详细的分析了MySQL中索引的作用 以及查看 创建及删除索引的相关实现技巧 具有一定参考借鉴价值 需要的朋友可以参考下 本文实例讲述了MySQL查看 创建和删除索引的方