前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >索引的基本语法

索引的基本语法

作者头像
技能锦囊
发布于 2020-05-29 01:08:22
发布于 2020-05-29 01:08:22
55400
代码可运行
举报
文章被收录于专栏:MySQL 笔记MySQL 笔记
运行总次数:0
代码可运行

索引是排好序的数据结构!可以用在 where 条件查找的字段,和order by 排序的字段,有了索引,便可以快速地定位数据所在的物理地址并找出来。

索引的分类

1.普通索引(normal):没有任何约束,主要用于提高查询效率

2.唯一索引(UNIQUE):在普通索引的基础上增加了数据唯一性的约束,可以有多个

3.主键索引(primary key):主键索引在唯一索引的基础上增加了不为空的约束,也就是 NOT NULL+UNIQUE,只能有一个

4.全文索引(FULLTEXT):MySQL 自带的全文索引只支持英文。

一般使用专门的全文搜索引擎,比如 ES(ElasticSearch)

创建索引

#普通索引
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ALTER TABLE 表名 ADD INDEX 索引名 (column_list);
#唯一索引
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ALTER TABLE 表名 ADD UNIQUE 索引名(column_list);
#主键索引
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ALTER TABLE 表名 ADD PRIMARY KEY 索引名(column_list);
#全文索引(字符串数据类型)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ALTER TABLE 表名 ADD fulltext 索引名(column_list);    

查看索引

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
show index from student \G

这里用\G 代替分号结束符;可以格式化输出数据信息。

删除索引

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
① 修改表的方式删除索引
ALTER TABLE 表名 DROP INDEX 索引名;

② 删除主键索引
ALTER TABLE 表名 DROP PRIMARY KEY;

索引列为一列时为单一索引; 多个列组合在一起创建的索引叫做联合索引

什么情况下可以创建索引?

1.字段的数值有唯一性的限制,比如id

2.频繁作为 WHERE 查询条件的字段,尤其在数据表大的情况下

如果在数据量非常大的情况下,没有 WHERE 条件过滤是非常可怕的。

3.需要经常 GROUP BY 和 ORDER BY 的列

4.UPDATE、DELETE 的 WHERE 条件列,一般也需要创建索引

原理是因为我们需要先根据 WHERE 条件列检索出来这条记录,然后再对它进行更新或删除,非索引字段更新数据效果更明显;

如果索引太多了,在更新数据的时候,如果涉及到索引更新,就会造成负担。

5.DISTINCT 字段需要创建索引

6.做多表 JOIN 连接操作时,创建索引需要注意以下的原则

连接表的数量尽量不要超过 3 张,每增加一张表就相当于增加了 一次嵌套的循环,数量级增长会非常快 对用于连接的字段创建索引,并且该字段在多张表中的类型必须一致。

什么时候不需要创建索引?

索引的价值是快速定位,如果起不到定位的字段通常是不需要创建索引的

1.WHERE 条件(包括 GROUP BY、ORDER BY)里用不到的字段不需要创建索引;

2.表记录太少,比如少于 1000 行,那么是不需要创建索引;

3.字段中如果有大量重复数据,也不用创建索引,比如性别字段;

4.频繁更新的字段不一定要创建索引。因为更新数据的时候,也需要更新索引,如果索引太多,在更新索引的时候也会造成负担,从而影响效率;

什么情况下索引失效?

1.如果索引列进行了表达式计算,使用函数,则会失效2.在 WHERE 子句中,如果在 OR 前的条件列进行了索引,而在 OR 后的条件列没有进行索引,那么索引会失效。3.当我们使用 LIKE 进行模糊查询的时候,表达式不能是 % 开始4.索引列尽量设置为 NOT NULL 约束

判断索引列是否为 NOT NULL,往往需要走全表扫描,因此我们最好在设计数据表的时候就将字段设置为 NOT NULL 约束比如你可以将 INT 类型的字段,默认值设置为 0。将字符类型的默认值设置为空字符串 ('')

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 技能锦囊 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MySQL常用语句
  今天天气很好,大晴天,心情也好好的。就将MySQL常用的语句总结一下,记录在随笔里,也顺便分享分享。日后,这篇随笔我将会持续更新,作为我自己的MySQL语句大全。
那一叶随风
2018/08/22
5230
mysql索引及优化
MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。
allsmallpig
2021/02/25
8000
MySQL 的约束和索引专题
主键约束 表中任意列只要满足以下条件,都可以用于主键。 ❑ 任意两行的主键值都不相同。 ❑ 每行都具有一个主键值(即列中不允许NULL值)。 ❑ 包含主键值的列从不修改或更新。(大多数 DBMS 不允许这么做,但如果你使用的 DBMS 允许这样做,好吧,千万别!) ❑ 主键值不能重用。如果从表中删除某一行,其主键值不分配给新行。
acc8226
2022/05/17
1.6K0
MySQL学习15_索引index
使用 SHOW INDEX 命令来列出表中的相关的索引信息。可以通过添加\G来格式化输出信息
皮大大
2021/03/02
4450
数据库查询优化——Mysql索引
工作一年了,也是第一次使用Mysql的索引。添加了索引之后的速度的提升,让我惊叹不已。隔壁的老员工看到我的大惊小怪,平淡地回了一句“那肯定啊”。
全栈程序员站长
2021/04/07
5.5K0
MySql基础-笔记10-索引
它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。
虫无涯
2023/01/31
2330
mysql操作命令梳理(1)-索引
1、创建索引 索引的创建可以在CREATE TABLE语句中进行,也可以单独用CREATE INDEX或ALTER TABLE来给表增加索引。以下命令语句分别展示了如何创建主键索引(PRIMARY KEY),联合索引(UNIQUE)和普通索引(INDEX)的方法。 mysql>ALTER TABLE 表名 ADD INDEX 索引名 列名; mysql>ALTER TABLE 表名 ADD UNIQUE 索引名 列名; mysql>ALTER TABLE 表名 ADD PRIMARY KEY 索引名 列名;
洗尽了浮华
2018/01/22
1.2K0
MySQL/Oracle索引的创建与使用
MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。
互联网金融打杂
2018/09/28
1K0
MySQL/Oracle索引的创建与使用
MySQL-索引;视图「建议收藏」
MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。
全栈程序员站长
2022/09/16
1.4K0
MySQL-索引;视图「建议收藏」
mysql的最佳索引攻略
所谓索引就是为特定的mysql字段进行一些特定的算法排序,比如二叉树的算法和哈希算法,哈希算法是通过建立特征值,然后根据特征值来快速查找,而用的最多,并且是mysql默认的就是二叉树算法 BTREE,通过BTREE算法建立索引的字段,比如扫描20行就能得到未使用BTREE前扫描了2^20行的结果,具体的实现方式后续本博客会出一个算法专题里面会有具体的分析讨论;
全栈程序员站长
2022/07/19
5400
mysql的最佳索引攻略
mysql学习总结08 — 优化(设计层)-索引与分区分表
普通索引:(index) 对关键字没有要求,如果一个索引在多个字段提取关键字,称为复合索引
CS逍遥剑仙
2018/10/09
2K0
mysql学习总结08 — 优化(设计层)-索引与分区分表
MySQL 索引
它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。它有以下几种创建方式:
network_dream
2023/11/13
1550
MySQL 数据库创建索引及删除索引的操作命令
如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如果是BLOB和TEXT类型,必须指定 length。
用户1685462
2021/07/27
2.7K0
MySQL从删库到跑路_高级(六)——索引
索引(Index)是帮助MySQL高效获取数据的数据结构。 在MySQL中,索引属于存储引擎级别的概念,不同存储引擎对索引的实现方式是不同的。MyISAM和InnoDB存储引擎只支持BTREE索引,MEMORY/HEAP存储引擎支持HASH和BTREE索引。    
良月柒
2019/03/19
1.2K0
Mysql索引
MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。
kevinfaith
2020/01/21
1.9K0
mysql之视图、索引
视图(View)是一种虚拟存在的表,同真实表一样,视图也由列和行构成,但视图并不实际存在于数据库中。行和列的数据来自于定义视图的查询中所使用的表,并且还是在使用视图时动态生成的。
全栈程序员站长
2022/09/16
9900
【MySQL】MySQL的索引
索引是通过某种算法,构建出一个数据模型,用于快速找出在某个列中有一特定值的行,不使用索
陶然同学
2023/03/12
3.2K0
【MySQL】MySQL的索引
一文搞懂MySQL索引(清晰明了)[通俗易懂]
索引是对数据库表中一列或多列的值进行排序的一种结构。MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。索引只是提高效率的一个因素,如果你的MySQL有大数据量的表,就需要花时间研究建立最优秀的索引,或优化查询语句。
全栈程序员站长
2022/09/12
1.4K0
一文搞懂MySQL索引(清晰明了)[通俗易懂]
【数据库原里与运用|MySQL】MySQL各类索引的创建及使用
        总所周知,数据库查询是数据库的最主要功能之一。我们都希望查询数据的速度能尽可能的快。而支撑这一快速的背后就是索引;MySQL索引问题也是大家经常遇到的面试题模块,想想自己也没有去系统地总结过索引,所以记录这篇文章来讲下索引。下面还是按照索引是什么->索引分类->各类索引的创建及使用->索引的特点->使用索引的注意事项来写。
小小程序员
2023/02/24
1.3K0
【数据库原里与运用|MySQL】MySQL各类索引的创建及使用
【MySQL】索引
索引是通过某种算法,构建出一个数据模型,用于快速找出在某个列中有一特定值的行,不使用索
陶然同学
2023/02/24
2.4K0
【MySQL】索引
相关推荐
MySQL常用语句
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验