常见的索引类型

  • 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. ElasticSearch实战系列八: Filebeat快速入门和使用---图文详解

    前言 本文主要介绍的是ELK日志系统中的Filebeat快速入门教程. ELK介绍 ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是 ...

  2. webpack 热替换

    一. 使用express.js搭建一个简易服务器demo地址,热替换的 先看包 // 清除重复的文件 "clean-webpack-plugin" // css加载器 " ...

  3. oracle 将数据库的表复制到另一个数据库表内

    将数据库A中的表sys_role复制到数据库B中在数据库b中的SQL工作表写如下代码: 第一步:建立链接 CREATE database link A //数据库名称CONNECT to text  ...

  4. 数字货币比特币以太坊买卖五档行情数据API接口

    数字货币比特币以太坊买卖五档行情数据API接口       数字货币一般包含比特币BTC.以太坊ETH.瑞波币XRP.泰达币USDT.比特币现金BCH.比特币SV.莱特币LTC.柚子币EOS.OKB. ...

  5. latex:备忘代码

    1.脚注代码: \footnote{欧几里德,约公元前330--340年.} 结果为: 2.改变某个字的字体形状,表示强调 \emph{勾股定理} 结果为(勾股数这三个字与其他字不一样): 3.正文中 ...

  6. php使用curl来获取远程图片

    本文章来介绍php使用curl来获取远程图片实现方法,有需要了解采集远程图片的朋友不防进入参考. curl要求php环境支持才行. 可以运行phpinfo()函数是否支持,一般要将php.ini中;e ...

  7. P2607 [ZJOI2008]骑士 基环树,树dp;

    P2607 [ZJOI2008]骑士 本题本质上就是树dp,和没有上司的舞会差不多,只不过多了一个对基环树的处理. #include<iostream> #include<cstri ...

  8. 小程序 使用Promise封装request 接口请求

    //httpService.jsconst host = 'https://baidu.com/ceshi' // 接口请求的域名 // get请求使用 json对象转字符串 (formatParam ...

  9. mybatis逆向工程介绍

    项目的model一旦多了起来,复杂了起来,我们很自然的想到使用mybatis的逆向工程来生成相应的pojo和mapper,能节省很多精力. MyBatis Generator(MBG)是 MyBati ...

  10. 【新鲜出炉的个人项目】基于 Flink 的商品推荐系统

    FlinkCommodityRecommendationSystem Recs FlinkCommodityRecommendationSystem(基于 Flink 的商品推荐系统) 1. 前言 系 ...