1.首先我们需要明确一下什么是索引以及为什么要使用索引:

  索引在MySQL中也叫做“键”,是存储引擎用于快速找到记录的一种数据结构。在生产环境中,对于数据库我们最常进行的是查询的操作,而当我们的数据非常大的时候,提高我们的查询效率就变得尤为重要,而索引可以帮我们很好的优化这方面的性能.简单来说,索引就相当于我们新华大字典的音序表,可以快速的帮我们找到我们需要的数据所在的位置

2.实现:

索引通常是使用b+树这种数据结构实现的,b+tree 索引加速了数据访问,因为存储引擎不会再去扫描整张表得到需要的数据;相反,它从根节点开始,根节点保存了子节点的指针,存储引擎会根据指针快速寻找数据。

3.索引的分类

(1)普通索引index :加速查找
(2)唯一索引
主键索引:primary key :加速查找+约束(不为空且唯一)
唯一索引:unique:加速查找+约束 (唯一)
(3)联合索引
-primary key(id,name):联合主键索引
-unique(id,name):联合唯一索引
-index(id,name):联合普通索引
(4)全文索引fulltext :用于搜索很长一篇文章的时候,效果最好。
(5)空间索引spatial

4.索引的使用

1 #方法一:创建表时
2   CREATE TABLE 表名 (
3 字段名1 数据类型 [完整性约束条件…],
4 字段名2 数据类型 [完整性约束条件…],
5 [UNIQUE | FULLTEXT | SPATIAL ] INDEX | KEY
6 [索引名] (字段名[(长度)] [ASC |DESC])
7 );
8
9
10 #方法二:CREATE在已存在的表上创建索引
11 CREATE [UNIQUE | FULLTEXT | SPATIAL ] INDEX 索引名
12 ON 表名 (字段名[(长度)] [ASC |DESC]) ;
13
14
15 #方法三:ALTER TABLE在已存在的表上创建索引
16 ALTER TABLE 表名 ADD [UNIQUE | FULLTEXT | SPATIAL ] INDEX
17 索引名 (字段名[(长度)] [ASC |DESC]) ;
18
19 #删除索引:DROP INDEX 索引名 ON 表名字;

5.关于使用索引的优缺点

优点:

  1)建立索引可以大大提高检索的数据,以及减少表的检索行数

  2)在表连接的连接条件 可以加速表与表直接的相连

  3)在分组和排序字句进行数据检索,可以减少查询时间中 分组 和 排序时所消耗的时间(数据库的记录会重新排序)

  4)建立索引,在查询中使用索引 可以提高性能

缺点:

  1)创建和维护索引的时候,会消耗时间

  2)创建出来的索引会占据一定的物理空间

  3)当对表的数据进行 INSERT,UPDATE,DELETE 的时候,索引也要动态的维护,这样就会降低数据的维护速度,(建立索引会占用磁盘空间的索引文件。一般情况这个问题不太严重,但如果你在一个大表上创建了多种组合索引,索引文件的会膨胀很快)。




有关mysql索引的更多相关文章

  1. 深入MySQL索引

    MySQL索引作为数据库优化的常用手段之一在项目优化中经常会被用到, 但是如何建立高效索引,有效的使用索引以及索引优化的背后到底是什么原理?这次我们深入数据库索引,从索引的数据结构开始说起. 索引原理 ...

  2. MySQL 索引

    MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度. 打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是 ...

  3. MYSQL索引结构原理、性能分析与优化

    [转]MYSQL索引结构原理.性能分析与优化 第一部分:基础知识 索引 官方介绍索引是帮助MySQL高效获取数据的数据结构.笔者理解索引相当于一本书的目录,通过目录就知道要的资料在哪里, 不用一页一页 ...

  4. MySQL索引原理及慢查询优化

    原文:http://tech.meituan.com/mysql-index.html 一个慢查询引发的思考 select count(*) from task where status=2 and ...

  5. 【转】MySQL索引背后的数据结构及算法原理

    摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BT ...

  6. [转]MySQL索引背后的数据结构及算法原理

    摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BT ...

  7. MySQL索引类型总结和使用技巧以及注意事项

    索引是快速搜索的关键.MySQL索引的建立对于MySQL的高效运行是很重要的.下面介绍几种常见的MySQL索引类型 在数据库表中,对字段建立索引可以大大提高查询速度.假如我们创建了一个 mytable ...

  8. MySQL索引背后的数据结构及算法原理【转】

    本文来自:张洋的MySQL索引背后的数据结构及算法原理 摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持 ...

  9. mysql索引总结----mysql 索引类型以及创建

    文章归属:http://feiyan.info/16.html,我想自己去写了,但是发现此君总结的非常详细.直接搬过来了 关于MySQL索引的好处,如果正确合理设计并且使用索引的MySQL是一辆兰博基 ...

  10. Mysql 索引实现原理. 聚集索引, 非聚集索引

    Mysql索引实现: B-tree,B是balance,一般用于数据库的索引.使用B-tree结构可以显著减少定位记录时所经历的中间过程,从而加快存取速度.而B+tree是B-tree的一个变种,My ...

随机推荐

  1. vue 追书神器

    app.vue页面 初始化数据,通过调用vuex mutation里定义的方法 调用保存到localstorage中的书架信息.搜索历史记录.字体大小和皮肤 并把这些数据保存的vuex state中 ...

  2. 类String 常用方法

    字符串当中的常用方法之比较相关的方法 public boolean equals (object obj):将此字符串与指定的对象进行比较(只有参数是字符串并且内容相同才会返回true) public ...

  3. CSV的简单用法

    读文件 import csv with open('test.csv','rb') as myFile: lines=csv.reader(myFile) for line in lines: pri ...

  4. 在C++中定义常量

    在 C++ 中,有两种简单的定义常量的方式: 使用 #define 预处理器. 使用 const 关键字 使用 #define 预处理器: #define identifier value: #inc ...

  5. ios之库Protobuf的使用

    https://blog.csdn.net/dangbai01_/article/details/81099001 (1)Protobuf是什么? Protobuf 即 google protocol ...

  6. git 拉取远程分支到本地

    步骤: 1.新建一个空文件,文件名为hhhh 2.初始化 git init 3.自己要与origin master建立连接(下划线为远程仓库链接) git remote add origin git@ ...

  7. 小程序组件中有bindinput监听报异常

    真机上有问题,ide上是没问题的,   组件有处理函数,结果异常说页面没有处理函数,加上处理函数后就不报异常了.

  8. 改善python程序的建议[转]

    <编写高质量代码 改善Python程序的91个建议> <编写高质量代码 改善Python程序的91个建议>读后程序学习小结 - BigDeng_2014的专栏 - CSDN博客 ...

  9. 【dp】 背包问题

    问题一:01背包 题目: [题目描述] 一个旅行者有一个最多能装 M 公斤的背包,现在有 n件物品,它们的重量分别是W1,W2,...,Wn它们的价值分别为C1,C2,...,Cn求旅行者能获得最大总 ...

  10. grep废弃

    grep -inrw 字符串 .grep -i是忽略大小写的意思cat xxx|grep -i mem 会把文本里的MEM,meM.....等无关乎大小写的内容取出来grep -inrwgrep &q ...