MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。

打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车。

索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索引包含多个列。

创建索引时,你需要确保该索引是应用在 SQL 查询语句的条件(一般作为 WHERE 子句的条件)。

实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。

上面都在说使用索引的好处,但过多的使用索引将会造成滥用。因此索引也会有它的缺点:虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。

建立索引会占用磁盘空间的索引文件。


普通索引

创建索引

这是最基本的索引,它没有任何限制。它有以下几种创建方式:

CREATE INDEX indexName ON mytable(username(length)); (username(length)); 

如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如果是BLOB和TEXT类型,必须指定 length。

修改表结构(添加索引)

ALTER table tableName ADD INDEX indexName(columnName)(columnName)

创建表的时候直接指定

CREATE TABLE mytable(  ID INT NOT NULL,   username VARCHAR(16) NOT NULL,  INDEX [indexName] (username(length))  );  (  ID INT NOT NULL,   username VARCHAR(16) NOT NULL,  INDEX [indexName] (username(length))  );  

删除索引的语法

DROP INDEX [indexName] ON mytable; [indexName] ON mytable; 

唯一索引

它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。它有以下几种创建方式:

创建索引

CREATE UNIQUE INDEX indexName ON mytable(username(length)) (username(length)) 

修改表结构

ALTER table mytable ADD UNIQUE [indexName] (username(length))[indexName] (username(length))

创建表的时候直接指定

CREATE TABLE mytable(  ID INT NOT NULL,   username VARCHAR(16) NOT NULL,  UNIQUE [indexName] (username(length))  );  (  ID INT NOT NULL,   username VARCHAR(16) NOT NULL,  UNIQUE [indexName] (username(length))  );  

使用ALTER 命令添加和删除索引

有四种方式来添加数据表的索引:

  • ALTER TABLE tbl_name ADD PRIMARY KEY (column_list): 该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL。
  • ALTER TABLE tbl_name ADD UNIQUE index_name (column_list): 这条语句创建索引的值必须是唯一的(除了NULL外,NULL可能会出现多次)。
  • ALTER TABLE tbl_name ADD INDEX index_name (column_list): 添加普通索引,索引值可出现多次。
  • ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list):该语句指定了索引为 FULLTEXT ,用于全文索引。

以下实例为在表中添加索引。

mysql> ALTER TABLE testalter_tbl ADD INDEX (c);> ALTER TABLE testalter_tbl ADD INDEX (c);

你还可以在 ALTER 命令中使用 DROP 子句来删除索引。尝试以下实例删除索引:

mysql> ALTER TABLE testalter_tbl DROP INDEX c;> ALTER TABLE testalter_tbl DROP INDEX c;

使用 ALTER 命令添加和删除主键

主键只能作用于一个列上,添加主键索引时,你需要确保该主键默认不为空(NOT NULL)。实例如下:

mysql> ALTER TABLE testalter_tbl MODIFY i INT NOT NULL;
mysql> ALTER TABLE testalter_tbl ADD PRIMARY KEY (i);> ALTER TABLE testalter_tbl MODIFY i INT NOT NULL;
mysql> ALTER TABLE testalter_tbl ADD PRIMARY KEY (i);

你也可以使用 ALTER 命令删除主键:

mysql> ALTER TABLE testalter_tbl DROP PRIMARY KEY;> ALTER TABLE testalter_tbl DROP PRIMARY KEY;

删除主键时只需指定PRIMARY KEY,但在删除索引时,你必须知道索引名。


显示索引信息

你可以使用 SHOW INDEX 命令来列出表中的相关的索引信息。可以通过添加 \G 来格式化输出信息。

尝试以下实例:

mysql> SHOW INDEX FROM table_name; \G> SHOW INDEX FROM table_name; \G

MySQL 索引介绍!相关推荐

  1. MySql查询优化性能调优,sql性能自测方法,及Mysql索引介绍

    MySql查询优化性能调优,sql性能自测方法,及Mysql索引介绍 前言 一.普通优化加索引(适用于where条件后一个查询条件) 二.组合查询加索引(适用于where条件后多个查询条件) 三.My ...

  2. Mysql索引介绍及使用注意事项,limit分页查询,慢查询分析

    Mysql索引介绍及使用注意事项,limit分页查询,慢查询分析 本文将从以下十二个方面进行介绍: 一.索引概念介绍 二.索引类型FULLTEXT,HASH,BTREE,RTREE有什么功能和性能上的 ...

  3. Mysql索引介绍及常见索引的区别

    Mysql索引概念: 说说Mysql索引,看到一个很少比如:索引就好比一本书的目录,它会让你更快的找到内容,显然目录(索引)并不是越多越好,假如这本书1000页,有500也是目录,它当然效率低,目录是 ...

  4. MySQL索引介绍,普通索引,全文索引,空间索引,多列索引使用原则,建立索引常用的规则

    转自:https://blog.csdn.net/tomorrow_fine/article/details/78337735 1.MySQL在创建数据表的时候创建索引 在MySQL中创建表的时候,可 ...

  5. mysql索引linke和等于_MySQL索引介绍和实战

    索引是什么 mysql官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构. 可以得到索引的本质:索引是数据结构,索引的目的是提高查询效率,可以类比英语新华字典,根据目录定位词 ...

  6. MySQL索引的介绍和使用

    MySQL索引 1.介绍 为何要有索引? ​ 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询 ...

  7. mysql介绍索引类型的章节_mysql索引总结--mysql索引类型以及创建的详细介绍

    关于MySQL索引的好处,如果正确合理设计并且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车.对于没有索引的表,单表查询可能几十万数据就是瓶颈,而通常大型 ...

  8. Mysql索引、命令重点介绍

    目录 Mysql 索引整理 1.索引概念介绍: 2.索引基本操作 3.索引的底层原理 4.聚簇索引.非聚簇索引 5.什么情况下无法利用索引 附录: 常用sql crud相关sql 关键字顺序 1.使用 ...

  9. MySQL索引的概念以及七种索引类型介绍

    MySQL索引的概念以及七种索引类型介绍. 文章目录 1 索引的概念 2 索引的类型 1 索引的概念 索引(在MySQL中也叫做"键(key)")是存储引擎用于快速找到记录的一种数 ...

最新文章

  1. 流包装器实现WebShell免杀
  2. 我的世界服务器里怎么无限随机传送,我的世界随机传送插件使用教程 权限指令分享...
  3. python tensorflow 文本提取_如何在tensorflow中保存文本分类模型?
  4. 深入学习.NET Web Services概念
  5. Transformer的学习
  6. R语言实战-读书笔记整理
  7. 颜值牛逼惨了的swagger-UI
  8. 在深度反应离子蚀刻工具中调整蚀刻方向性
  9. N32926 24小时连续测试720p, h.264 IPCAM功能,为什么基本不发热呢?
  10. 短信系统实现原理(基于redis)
  11. java8中的流(Stream)
  12. AS3实现经典算法(一) 斐波纳契数列
  13. one 主格 复数 宾格_人称代词的主格和宾格
  14. golang并发http请求几种方式
  15. Android--经典蓝牙(文件传输--socket通信)
  16. matlab里surf函数,matlab surf 函数画3维图
  17. 安装Deb软件的方法
  18. 艺赛旗(RPA) 新手课堂 - 键盘与输入
  19. day4 高阶函数 嵌套函数 装饰器 内置函数 列表生成式 迭代器 生成器
  20. 【TFS-CLUB社区 第7期赠书活动】〖从零开始利用Excel与Python进行数据分析 自动化办公实战宝典〗等你来拿,参与评论,即可有机获得

热门文章

  1. 你为你的BLOG找了经纪人了吗?
  2. 网络号和主机号的计算
  3. 关于FlashDB的应用-GD32F450上
  4. python国内大学哪个教学厉害-国内的本科 CS 教学和国外相比有什么优劣?
  5. 计算机代表数字的通用码是什么,数字信息在计算机中的表示及编码.ppt
  6. Halcon连接大恒相机
  7. C语言算一维数组均值和标准差(随机生成数组0~100)
  8. 3D打印机内网联机打印(1)orangpiPlus安装Octoprint
  9. linux中的怎么添加组,linux中添加用户 添加组
  10. ElementUI分页组件+Vue