MySQL索引

  索引:是一种特殊的文件(InnoDB 数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。其可以加快数据操作,但会使数据操作变慢;应该构建在被用作查询条件的字段上。

  MySQL中的索引类型:

    1.B+TREE索引

      Balance Tree(平衡树),是一种数据结构,由于其综合效率较高,显著减少定位记录时所经历的中间过程,从而加快存取速度。

      可用来查询的类型:

        (1)全值匹配

        (2)匹配最左前缀

        (3)匹配列前缀

        (4)匹配范围值

      但也有一些限制:

        (1)必须从最左侧开始查询

        (2)不能跳过某一索引

        (3)如果查询中某个列为范围查询,那么其右侧的列都无法再使用索引优化查询;(精确范围放左侧,范围查询放右侧即可;反之,右侧将无法再使用索引查询。)

    2.Hash索引     

      基于哈希表,适合精确匹配索引中的所有列;但只有Memory存储引擎支持显式hash索引;不支持模糊匹配,不适用于顺序查询;

    3.空间索引(R-TREE):

      在MySQL中仅MyISAM存储引擎支持空间索引;

    4.全文索引(FULLTEXT):

      在文本中查找关键词,类似于搜索引擎;

  MySQL中索引的管理: 

/*创建索引*/
CREATE INDEX index_name ON tbl_name(col1,col2,...); /*删除索引*/
DROP [ONLINE|OFFLINE] INDEX index_name ON tbl_name; /*查看索引*/
SHOW {INDEX|INDEXES|KEYS} {FORM|IN} tbl_name [{FROM|IN} db_name] [WHERE expression];

  如何分析索引有效性?

    EXPLAIN SELECT Clause...

  其输出结果为:

  各项指标的解释如下:

    id:当前查询中SELECT语句的编号

    select_type:查询类型

/*相关的类型*/

SIMPLE  //简单查询
SUBQUERY //简单子查询
DERIVED //用于FROM的子查询;
UNION //UNION语句中UNION后的第一个SELECT语句
UNION RESULT //UNION之后的总体临时虚表

    table:查询关联到的表

    type:关联类型,即MySQL查询表的方式

/*相关的类型*/

ALL  //全表扫描
index //根据索引的次序进行全表扫描;如果在Extra中出现了“USING index”则表示使用了覆盖索引,而非全表扫描
range //有限制的根据索引实现的范围扫描
ref //根据索引返回表中匹配某单个值的所有行
eq_ref //仅返回一行,但需要额外与某个参考值作比较
const,system //直接返回单个行;此类型为最佳查询;

    possible_keys:查询中可能会用到的索引

    key:查询中使用的索引

    key_len:使用索引的字节数

    ref:在利用key所表示的索引完成查询时所有的列或某常量值

    row:MySQL找到目标所读取的行数

    Extra:额外信息

/*额外信息*/

Using index  //MySQL将会使用覆盖索引,以避免访问表;
Using where //MySQL服务器将在存储引擎检索后,再进行一次过滤;
Using temporary //MySQL对结果排序时会使用临时表;
Using filesort //对结果使用一个外部索引排序(性能低下);

    

MySQL的索引的更多相关文章

  1. 【夯实Mysql基础】MySQL性能优化的21个最佳实践 和 mysql使用索引

    本文地址 分享提纲: 1.为查询缓存优化你的查询 2. EXPLAIN 你的 SELECT 查询 3. 当只要一行数据时使用 LIMIT 1 4. 为搜索字段建索引 5. 在Join表的时候使用相当类 ...

  2. MySQL中索引和优化的用法总结

    1.什么是数据库中的索引?索引有什么作用? 引入索引的目的是为了加快查询速度.如果数据量很大,大的查询要从硬盘加载数据到内存当中. 2.InnoDB中的索引原理是怎么样的? InnoDB是Mysql的 ...

  3. MySQL 联合索引详解

    MySQL 联合索引详解   联合索引又叫复合索引.对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分.例如索引是key index (a,b,c ...

  4. Mysql复合索引

    当Mysql使用索引字段作为条件时,如果该索引是复合索引,必须使用该索引中的第一个字段作为条件才能保证系统使用该索引,否则该索引不会被使用,并且应尽可能地让索引顺序和字段顺序一致

  5. 如何正确建立MYSQL数据库索引

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

  6. mysql高性能索引策略

    转载说明:http://www.nyankosama.com/2014/12/19/high-performance-index/ 1. 引言 随着互联网时代地到来,各种各样的基于互联网的应用和服务进 ...

  7. MySQL创建索引语法

    1.介绍: 所有mysql索引列类型都可以被索引,对来相关类使用索引可以提高select查询性能,根据mysql索引数,可以是最大索引与最小索引,每种存储引擎对每个表的至少支持16的索引.总索引长度为 ...

  8. mysql使用索引优化查询效率

    索引的概念 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针.更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度.在没 ...

  9. Mysql中索引的 创建,查看,删除,修改

    创建索引 MySQL创建索引的语法如下: ? 1 2 3 CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name [USING index_type] ON ...

  10. mysql 联合索引(转)

    http://blog.csdn.net/lmh12506/article/details/8879916 mysql 联合索引详解 联合索引又叫复合索引.对于复合索引:Mysql从左到右的使用索引中 ...

随机推荐

  1. A - Til the Cows Come Home

    裸的最短路,试一下刚看的spfa,虽然没有看代码,不过明白了大致的思想,先写一下试试吧,而且是个稀疏图,应该会很快吧. SPFA 算法采用图的存储结构是邻接表,方法是动态优化逼近法.算法中设立了一个先 ...

  2. 杯具,万达电商又换CEO

    万达电商CEO再离职.而这距他入职还差一个月才满一年. 昨晚.万达电商CEO董策告诉新浪科技6月3日已正式从万达电商离职.将去往澳洲照应家人.而谈到离职原因和万达电商时,董策以开会为由收了电话. 从2 ...

  3. 最近新出的C++右值引用的意思

    看了一下这种方法的介绍,个人感觉,右值引用,更像人类的思想了,有些将编译前与编译后结合紧密的感觉. 左值引用是变量名的别名,右值引用是值的别名,也就是不将值赋给一个变量名所在的地址,直接将值所在的初始 ...

  4. ORACLE 11G EXP导出空表方法

    EXP在导出11G的库的时候,与过去10G,9I的版本有很大的差别. 就是没有数据的表是不会分配空间的. 从Oracle 11.2.0.1版本开始,Oracle又提供了一种新的空间分配方法: Crea ...

  5. Java数学表示式解析工具- jeval

    这个包能够为我们提高高效的数学表达式计算. 举个样例:这个是我们策划给出的游戏命中率的一部份计算公式 是否命中=a命中率 – (b等级 – a等级) * (命中系数(6)* b闪避率 / 100)+3 ...

  6. 第三篇:R语言数据可视化之条形图

    条形图简介 数据可视化中,最常用的图非条形图莫属,它主要用来展示不同分类(横轴)下某个数值型变量(纵轴)的取值.其中有两点要重点注意: 1. 条形图横轴上的数据是离散而非连续的.比如想展示两商品的价格 ...

  7. Java基础知识强化19:Java中switch分支语句

    java中switch语句: 这里expression控制表达式的数据类型只能是byte.short.char.int四种整型类型和枚举类型,不能是boolean类型: Java7(1.7)改进了sw ...

  8. sublime text3 插件配置

    (转) sublme text 全程指引:http://www.cnblogs.com/figure9/p/sublime-text-complete-guide.html 使用Package Con ...

  9. 2015 南阳ccpc The Battle of Chibi (uestc 1217)

    题意:给定一个序列,找出长度为m的严格递增序列的个数. 思路:用dp[i][j]表示长度为i的序列以下标j结尾的总个数.三层for循环肯定超时,首先离散化,离散化之后就可以用树状数组来优化,快速查找下 ...

  10. 基于bootstrap的轮播广告页,带图片和文字

    <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="utf-8& ...