常见的索引类型

  • 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. Linked server的一个问题

    好久没有写新的博客,主要是很久没有什么动力和需求来写程序.虽然也不是一点没写,但都缺乏技术含量,没什么可说的. 前两天碰到一个关于linked server的问题.本地的sql server里,通过l ...

  2. Android java.lang.SecurityException: Permission Denial

    报错: java.lang.SecurityException: Permission Denial: starting Intent { act=android.media.action.IMAGE ...

  3. 实现0.5px边框线

    实现0.5px边框方法 方案一:利用渐变(原理:高度1px,背景渐变,一半有颜色,一半透明) CSS部分 .container { width: 500px; margin: 0px auto; } ...

  4. 微信小程序之蓝牙广播信息

    期初第一次做蓝牙开锁的时候遇到的最尖锐的问题就是ios设备如何对获取的广播信息进行读取,大概用了4中方式,都无法解决,最后不得不求助官方人员.给了一个方法,大家可以参考.在此附图: 由于mac地址是6 ...

  5. JavaScript学习系列博客_4_JavaScript中的数据类型

    JavaScript中有6种数据类型 一.基本数据类型 - String 字符串 JS中的字符串需要使用引号引起来双引号或单引号都行 但是要注意的是某种引号嵌套使用的话,需要加上 \ 转义.比如说我们 ...

  6. C++ Templates (1.6 但是为什么不...? But, Should't We ...?)

    返回完整目录 目录 1.6 但是为什么不...? But, Should't We ...? 1.6.1 传值还是传引用? Pass by Value or by Reference? 1.6.2 为 ...

  7. Python 判断ip是否属于网段

    import IPy >>>'192.168.1.100' in IPy.IP('192.168.1.0/24') is True >>>'192.168.1.0/ ...

  8. 基于伪分布式Hadoop搭建Hive平台详细教程

    一.搭建环境的前提条件 环境:Linux系统 Hadoop-2.6.0 MySQL 5.6 apache-hive-2.3.7 这里的环境不一定需要和我一样,基本版本差不多都ok的,所需安装包和压缩包 ...

  9. influxDB初步学习

    influxdb的安装等操作在我的文章. 首先得装influxdb,其次操作如下. application.properties spring.datasource.test1.jdbc-url=jd ...

  10. C语言中存储多个字符串的两种方式

    C语言中存储多个字符串的两种方式 方式一    二维字符串数组 声明: char name[][] = { "Justinian", "Momo", " ...