所谓索引就是为特定的mysql字段进行一些特定的算法排序,比如二叉树的算法和哈希算法,哈希算法是通过建立特征值,然后根据特征值来快速查找。MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。

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

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

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

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

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

一、索引的类型

1.UNIQUE唯一索引

不可以出现相同的值,可以有NULL值。

2.INDEX普通索引

允许出现相同的索引内容。

3.PRIMARY KEY主键索引

不允许出现相同的值,且不能为NULL值,一个表只能有一个primary_key索引。

4.fulltext index 全文索引

上述前三种索引都是针对列的值发挥作用,但全文索引,可以针对值中的某个单词,比如一篇文章中的某个词,然而实际效用低下,因为只有myisam以及英文支持,并且效率让人不敢恭维。

二、索引的创建

索引的创建方法有3种:

1.直接打开设计表,在索引栏目下添加索引。

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

--例:只能添加这两种索引,不能添加主键索引和全文索引

CREATE INDEX index_name ON table_name (column_list)

CREATE UNIQUE INDEX index_name ON table_name (column_list)

eg:CREATE INDEX idx_ename ON emp(ename)

3.ALTER TABLE适用于表创建完毕之后再添加。

ALTER TABLE 表名 ADD 索引类型 (unique,primary key,fulltext,index)[索引名](字段名)

ALTER TABLE table_name ADD INDEX index_name (column_list) -- 索引名,可要可不要;如果不要,当前的索引名就是该字段名。

eg:ALTER TABLE dept ADD INDEX idx_deptno (deptno)   #普通索引,索引名为idx_deptno

  ALTER TABLE dept ADD INDEX(deptno)    #普通索引,索引名默认为deptno

ALTER TABLE table_name ADD UNIQUE (column_list)    #唯一索引

ALTER TABLE table_name ADD PRIMARY KEY (column_list)   #主键索引

eg:ALTER TABLE dept ADD PRIMARY KEY idx_deptno(deptno)

ALTER TABLE table_name ADD FULLTEXT KEY (column_list)  #全文索引,一般不用

三、索引的删除

1.直接打开设计表,在索引栏目下删除索引。

2.DROP INDEX:

DROP INDEX index_name ON table_name

eg:DROP INDEX deptno ON dept

3.ALTER TABLE:

ALTER TABLE table_name DROP INDEX index_name

eg:ALTER TABLE dept DROP INDEX deptno

PS:这两句都是等价的,都是删除掉table_name中的索引index_name

4.删除主键索引

ALTER TABLE table_name DRP PRIMARY KEY -- 删除主键索引,注意主键索引只能用这种方式删除

eg:ALTER TABLE dept DROP PRIMARY KEY

四、索引的查看与更改

1.索引的查看

show index from tablename

eg:SHOW INDEX from dept

2.索引的更改

更改个毛线,删掉重建一个既可

 

 

2019.6.11_MySQL进阶一:索引的更多相关文章

  1. 2019.6.11_MySQL进阶二:主键与外键

    通过图形界面(UI)创建外键 打开设计表,在对应的栏位填写相应的内容.其中FK_deptno是限制名 # 先给主表建立主键   ALTER TABLE dept ADD PRIMARY KEY(dep ...

  2. 2019.6.11_MySQL进阶三:临时表

    临时表 临时表主要应用于保存一些临时数据.临时表只在当前连接可见.当关闭连接时,MySQL会自动删除表并且释放空间.临时表在MySQL 3.23版本中添加,低于 3.23版本就无法使用MySQL的临时 ...

  3. iOS进阶篇索引,标记和自定义的table

    一.带索引目录的表视图 ①效果图 图1 带索引的列表 ② 数据源 本想获取通讯录中得名字,但为了用模拟器调试方便,就写死了数据,所以也只写了部分字母,总之有那么点意思就成 @interface Vie ...

  4. 数据库 MySQL进阶之索引

    数据库的索引非常重要,基本面试数据库的问题都在索引上,所以这里小编整理出来,一方面为了自己复习,一方面也方便大家. 一,索引前传 在了解数据库索引之前,首先有必要了解一下数据库索引的数据结构基础,那么 ...

  5. mysql进阶(二)索引简易教程

    Mysql索引简易教程 基本概念 索引是指把你设置为索引的字段A的内容储存在一个独立区间S里,里面只有这个字段的内容.在找查这个与这个字段A的内容时会直接从这个独立区间里查找,而不是去到数据表里查找. ...

  6. MySQL 进阶之索引

    一,索引前传 在了解数据库索引之前,首先有必要了解一下数据库索引的数据结构基础,那么什么样的数据结构可以作为索引呢? B-tree是最常用的用于索引的数据结构.因为它们是时间复杂度低, 查找.删除.插 ...

  7. SQLite进阶-16.索引

    目录 索引 创建索引 查看索引 删除索引 创建索引的注意项 索引使用(Indexed By) 索引 索引(Index)是一种特殊的查找表,数据库搜索引擎用来加快数据检索.简单地说,索引是一个指向表中数 ...

  8. 2019.10.9php进阶

    <?php header("Content-type:text/html;charset:utf-8"); if ($_FILES["file"][&qu ...

  9. MySQL进阶之索引

    一.索引的本质: 数据库查询是数据库的最主要的功能之一,数据库系统的设计者从查询算法的角度对数据库进行了一定的优化. 最基本的顺序查找算法的复杂度为O(n),在数据量很大的时候算法的效率是很低的.虽然 ...

随机推荐

  1. 不依赖官方LibPack编译FreeCAD的一次尝试

    在Windows下编译FreeCAD,通常的方法是依赖官方提供的LibPack,但是只有vs2008, vs2012, vs2013等几个版本提供.比如现在感觉vs2017比较好用,可是没有官方Lib ...

  2. 如何在Markdown格式下插入动图/gif

    上传GIF动图与上传普通图片是一样的,都需要以下在markdown语法中 ![]() 的小括号内填写图片的地址.问题在于如何获取本地gif的地址呢? 核心的东西就是要把这个gif动图传上网络,这样图片 ...

  3. C++ 的 +,加号重载示例

    #include <iostream> // overloading "operator + " // 要考虑加法的形式 // a+1 // a+a // 1+a // ...

  4. SP1716 GSS3 - Can you answer these queries III 线段树

    问题描述 [LG-SP1716](https://www.luogu.org/problem/SP1716] 题解 GSS 系列的第三题,在第一题的基础上带单点修改. 第一题题解传送门 在第一题的基础 ...

  5. ENDGAME

    "So if I were to wrap this up tight with a bow or whatever,I guess I'd say my career of OI was ...

  6. 第05组 Alpha冲刺(2/4)

    第05组 Alpha冲刺(2/4) 队名:天码行空 组长博客连接 作业博客连接 团队燃尽图(共享): GitHub当日代码/文档签入记录展示(共享): 组员情况: 组员1:卢欢(组长) 过去两天完成了 ...

  7. Java连载40-参数传递、this关键字

    一.对象和引用 1.对象:目前在使用new运算符在堆内存中开辟的内存空间成为对象. 2.引用:是一个变量,不一定是局部变量,好可能是成员变量,引用保存了内存地址,指向了堆内存中对象.所有访问实例的相关 ...

  8. 教妹学 Java:难以驾驭的多线程

    00.故事的起源 “二哥,上一篇<集合>的反响效果怎么样啊?”三妹对她提议的<教妹学 Java>专栏很关心. “这篇文章的浏览量要比第一篇<泛型>好得多.” “这是 ...

  9. 【BZOJ1921】【CTSC2010】珠宝商(点分治,后缀自动机)

    [BZOJ1921][CTSC2010]珠宝商(点分治,后缀自动机) 题面 洛谷 BZOJ权限题 题解 如果要我们做暴力,显然可以以某个点为根节点,然后把子树\(dfs\)一遍,建出特征串的\(SAM ...

  10. 【linux】linux命令lsof和grep命令的配合使用---linux根据端口查看PID,根据PID关键字高亮显示

    lsof命令,根据端口,查看进程PID lsof -i: ps命令+grep命令 --color参数,根据PID查看进程详情,高亮显示关键字 ps -ef | grep --color=always