常见的索引类型

  • PROMARY KEY 主键索引,也是唯一索引,不允许重复数据。
  • UNIQUE INDEX唯一索引,不允许有重复数据。
  • INDEX 普通索引允许有重复数据。
  • 组合索引,对多个字段添加索引,上面几种都可设置为组合索引,组合索引需要满足最左前缀匹配原则。

这里有个有争议的地方,若有组合索引(a,b),SQL查询的时候单独使用b列,使用Explain对SQL进行解释,会发现extra字段显示 using index,和我们常说的单独查询b不走索引不一样,

实践上是因为组合索引的排列类似SQL中对2个字段进行 order by a,b 是在a有序的基础上对b进行排序,所以满足最左前缀的前提下才能对b进行高效查找,若单独使用b,会出现using index,但是因为此时b无序,无法高效查找,没有用上聚合索引。

在索引优化中还涉及到一个常见的知识点 : 回表

因为非主键索引是存储了索引字段你的数据和主键值,主键索引存储了整行的数据。若查询的数据中包含非该索引对应的字段,就会根据索引中存储的主键再去查一次数据,这个过程称为回表。

若有 t(a[PROMARY KEY],b,c,d) 此时我们增加索引 CREATE INDEX b_c ON t(b,c)

执行查询操作 SELECT b,c,d FROM t where b = xxx 因为组合索引中只有b c 字段和主键的值,所以需要回表【根据主键的值再去查一次表获得d】。

执行查询操作 SELECT b,c,a FROM t where b = xxx 因为组合索引中只有b c 字段和主键的值,一次即可获取所需要的全部值,避免了回表操作。

  • 所以我们在查询过程中可以尽量避免回表来提升SQL性能

下面是常用的索引操作的整理

  • 增加索引: CREATE INDEX b_c ON table_name(b,c) 或者 ALTER TABLE table_name ADD 索引类型 (unique,primary key,index)[索引名](字段名)

  • 删除索引:DROP INDEX index_name on table_name 或者ALTER TABLE table_name DROP INDEX index_name 或者 ALTER TABLE table_name DROP PROMARY KEY

  • 查看索引:SHOW INDEX FROM table_name

  • 分析索引:在SQL前加入关键字 explain

MySQL索引的基本操作的更多相关文章

  1. mysql数据库的基本操作

    mysql数据库的基本操作dos命令启动mysql服务:net start mysql启动数据库: mysql -uroot -p查看所有的数据库:show databases:新建数据库:creat ...

  2. 知识点:Mysql 索引原理完全手册(2)

    知识点:Mysql 索引原理完全手册(1) 知识点:Mysql 索引原理完全手册(2) 知识点:Mysql 索引优化实战(3) 知识点:Mysql 数据库索引优化实战(4) 八. 联合索引与覆盖索引 ...

  3. 深入MySQL索引

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

  4. MySQL 索引

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. 数值分析案例:Newton插值预测2019城市(Asian)温度、Crout求解城市等温性的因素系数

    数值分析案例:Newton插值预测2019城市(Asian)温度.Crout求解城市等温性的因素系数 文章目录 数值分析案例:Newton插值预测2019城市(Asian)温度.Crout求解城市等温 ...

  2. JavaScript学习系列博客_17_JavaScript中的函数的参数、返回值

    数的形参(形式参数) - 定义函数时,可以在()中定义一个或多个形参,形参之间使用英文逗号隔开:定义形参就相当于在函数内声明了对应的变量但是并不赋值,形参会在调用时才赋值. 函数的实参(实际参数) - ...

  3. golang mysql demo

    Go操作Mysql数据库 使用Go操作MySQL等数据库,一般有两种方式:一是使用database/sql接口,直接在代码里硬编码sql语句:二是使用gorm,即对象关系映射的方式在代码里抽象的操作数 ...

  4. 团队作业4:第五篇Scrum冲刺博客(歪瑞古德小队)

    目录 一.Daily Scrum Meeting 1.1 会议照片 1.2 项目进展 二.项目燃尽图 三.签入记录 3.1 代码/文档签入记录 3.2 Code Review 记录 3.3 issue ...

  5. HTTP基础--请求

    请求,由客户端向服务器端发出,可以分为4部分:请求方法(Request Method),请求的网址(Request URL),请求头(Request Headers),请求体(Request Body ...

  6. js 判断 数组和对象

    提方案的时候顺便会引申一下该方法的使用. 一,instanceOf:(可以判断) instanceOf运算符用来测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性. 也可以这样说 ...

  7. python+requests+unittest执行自动化接口测试

    1.安装requests.xlrd.json.unittest库 <1>pip 命令安装: pip install requestspip install xlrdpip install ...

  8. JS - 日期时间比较函数

    JS日期比较(yyyy-mm-dd) function duibi(a, b) { var arr = a.split("-"); var starttime = new Date ...

  9. 【Android】Android开发小功能,倒计时的实现。时间计时器倒计时功能。

    作者:程序员小冰,GitHub主页:https://github.com/QQ986945193 新浪微博:http://weibo.com/mcxiaobing 首先给大家看一下我们今天这个最终实现 ...

  10. [U3D + GAD]Egametang开源服务器框架资源管理系统

    Egametang开源服务器框架资源管理系统详解 http://m.gad.qq.com/article/detail/36409 ET GitHub https://github.com/egame ...