本文主要讲解一下mysql show index 的语法,以 show index from bbs_posts 为例,先看下执行效果如图

1、Table   表名

2、Non_unique  如果索引不能包括重复值则为0,如果可以则为1。也就是平时所说的唯一索引

3、Key_name  索引名称,如果名字相同则表明是同一个索引,而并不是重复,比如上图中的第二、三条数据,索引名称都是index_fID_lastTime,其实是一个联合索引

4、Seq_in_index 索引中的列序列号,从1开始。上图中的二、三条数据,Seq_in_index一个是1一个是2,就是表明在联合索引中的顺序,我们就能推断出联合索引中索引的前后顺序

5、Column_name 索引的列名。

6、Collation  列以什么方式存储在索引中,大概意思就是字符序。在MySQLSHOW INDEX语法中,有值’A’(升序)或NULL(无分类)。默认的类型是utf8_general_ci,这样的大小写不敏感,比如下面两个sql会出现相同的查询结果:

select * from Table where content = 'Yes'
      select * from Table where content = 'yes'

这样可能不符合你的要求,你需要大小写敏感的情况,你可以修改字段字符集类型,如下sql

alter table bbs_posts modify column content varchar(5000) NOT NULL collate utf8_bin;

这样修改以后就OK了。

7、Cardinality  基数的意思,表示索引中唯一值的数目的估计值。基数根据被存储为整数的统计数据来计数,所以即使对于小型表,该值也没有必要是精确的。基数越大,当进行联合时,MySQL使用该索引的机会就越大。我们知道某个字段的重复值越少越适合建索引,所以我们一般都是根据Cardinality来判断索引是否具有高选择性,如果这个值非常小,那就需要重新评估这个字段是否适合建立索引。因为MySQL数据库中有各种不同的存储引擎,而每种存储引擎对于B+树索引的实现又各不相同。所以对Cardinality统计时放在存储引擎层进行的,至于它是如何统计更新的在这里就不再做更深入的介绍了。

8、Sub_part 前置索引的意思,如果列只是被部分地编入索引,则为被编入索引的字符的数目。如果整列被编入索引,则为NULL。如上图所示,除了index_content那行显示4外,其他的都是NULL,表明index_content是一个长度为4的前置索引。对于BLOB,TEXT,或者很长的VARCHAR类型的列,必须使用前缀索引,因为MySQL不允许索引这些列的完整长度,这会让索引变得大且慢。选择长度的诀窍在于要选择足够长的前缀以保证较高的选择性,同时又不能太长以便节约空间。下面是计算前置索引长度的一般方法:

select count(distinct left(content,3))/count(*) from bbs_posts as sel3

select count(distinct left(content,4))/count(*) from bbs_posts as sel4

select count(distinct left(content,5))/count(*) from bbs_posts as sel5

最后算出来那个长度的基数接近完整列的选择行就OK了,完整列 select count(distinct content)/count(*) from bbs_posts

9、Packed  指示关键字如何被压缩。如果没有被压缩,则为NULL。压缩一般包括压缩传输协议、压缩列解决方案和压缩表解决方案。

10、Null 如果列含有NULL,则含有YES。比如上图中的lastOperateTime其中就包含null,我们知道建立索引的列是不允许为Null的,单列索引不存Null值,复合索引不存全为Null的值,如果列允许为Null,可能会得到“不符合预期”的结果集。我这里是为了更好的给大家展示故意构造了一些数据。

11、Index_type 索引类型,Mysql目前主要有以下几种索引类型:FULLTEXT,HASH,BTREE,RTREE。

1). FULLTEXT
    即为全文索引,目前只有MyISAM引擎支持。其可以在CREATE TABLE ,ALTER TABLE ,CREATE INDEX 使用,不过目前只有 CHAR、VARCHAR ,TEXT 列上可以创建全文索引。全文索引并不是和MyISAM一起诞生的,它的出现是为了解决WHERE name LIKE “%word%"这类针对文本的模糊查询效率较低的问题。
    2). HASH
    由于HASH的唯一(几乎100%的唯一)及类似键值对的形式,很适合作为索引。    HASH索引可以一次定位,不需要像树形索引那样逐层查找,因此具有极高的效率。但是,这种高效是有条件的,即只在“=”和“in”条件下高效,对于范围查询、排序及组合索引仍然效率不高。
    3). BTREE    BTREE索引就是一种将索引值按一定的算法,存入一个树形的数据结构中(二叉树),每次查询都是从树的入口root开始,依次遍历node,获取leaf。这是MySQL里默认和最常用的索引类型。
    4). RTREE
    RTREE在MySQL很少使用,仅支持geometry数据类型,支持该类型的存储引擎只有MyISAM、BDb、InnoDb、NDb、Archive几种。相对于BTREE,RTREE的优势在于范围查找。

12、 Comment Index_comment  注释的意思。

希望对你有帮助,欢迎批评指正讨论。欢迎关注我的微信公众号:javaSharing。

MySQL SHOW INDEX 的语法解析相关推荐

  1. mysql ddl 语法解析工具_sharding-sphere之语法解析器

    语法解析器,根据不同类型的语句有不同的语法解析器去解析成成SQLStatement,SQL解析器的类图我用脑图画出来如下: SQLParser.png 可以看到,不同的sql有不同的处理解析器去解析, ...

  2. 用MySql的查询分析语法explain来优化查询和索引

    http://hi.baidu.com/wtnzone/item/beb83840a4971af4dd0f6c77 数据库最常见的操作就是查询了,我们经常要用"SELECT"语法对 ...

  3. MySQL force Index 强制索引概述

    以下的文章主要介绍的是MySQL force Index  强制索引,以及其他的强制操作,其优先操作的具体操作步骤如下:我们以MySQL中常用的hint来进行详细的解析,如果你是经常使用Oracle的 ...

  4. mysql ignore index,mysql强制索引FORCE INDEX/IGNORE INDEX忽略索引

    FORCE INDEX 通常用来对查询强制使用一个或者多个索引. MySQL 通常会根据统计信息选择正确的索引,但是当查询优化器选择了错误的索引或者根本没有使用索引的时候,这个提示将非常有用. IGN ...

  5. mysql 语句块语法_MySQL ------ MySQL常用语句的语法 (三十四)

    MySQL常用的语句语法 注意:1. | 符号用来指出几个选中中的一个,因此NULL | NOT NULL 表示给出null 或 not null 2.包含在方括号中的关键字或子句是可选的(如 [li ...

  6. calcite连接mysql_使用Calcite做Sql语法解析

    Flink SQL中使用Calcite作为sql语法解析.校验.优化工具,本篇是实操篇,介绍一下calcite做sql语法解析使用方式. sql经过calcite解析之后,得到一棵抽象语法树,也就是我 ...

  7. mysql之index

    1.索引作用 在索引列上,除了上面提到的有序查找之外,数据库利用各种各样的快速定位技术,能够大大提高查询效率.特别是当数据量非常大,查询涉及多个表时,使用索引往往能使查询速度加快成千上万倍. 例如,有 ...

  8. JavaScript的语法解析与抽象语法树

    抽象语法树(Abstract Syntax Tree)也称为AST语法树,指的是源代码语法所对应的树状结构.也就是说,对于一种具体编程语言下的源代码,通过构建语法树的形式将源代码中的语句映射到树中的每 ...

  9. 转JavaScript的语法解析与抽象语法树

    JavaScript的语法解析与抽象语法树 Jul 10, 2015 抽象语法树(Abstract Syntax Tree)也称为AST语法树,指的是源代码语法所对应的树状结构.也就是说,对于一种具体 ...

最新文章

  1. 基于高分辨率的单目深度估计网络(AAAI2021)
  2. 新手做自媒体运营了解这几个步骤,运营效率提高5倍!(附教程)
  3. 沟通无国界,云信助力译牛构建远程会议同传新模式
  4. Linux内核源码行数,Linux源代码已超过1000万行 价值达5亿美金
  5. js处理上下文代码的2个阶段
  6. linux 启动一个网站_在线试用 200 多种 Linux 和 Unix 操作系统
  7. Jmeter响应中中文乱码怎么解决?
  8. OpenJudge NOI 1.5 02:财务管理
  9. 计算机知识问答一站到底,一站到底的答题规则是什么
  10. Qt GUI@学习日志
  11. 华为荣耀7能改成Linux吗,华为荣耀7电池怎么样?华为荣耀7可以更换电池吗?
  12. JDBC实现用于操作数据库Mysql的工具类JDBCTools
  13. 8.卷2(进程间通信)---读写锁
  14. 错误使用 network/train (line 340) Output data size does not match net.outputs{2}.size.
  15. 液晶手写板原理拆解_天猫babycare儿童液晶手写板详情页拆解
  16. 空间尺寸对迭代次数的影响
  17. EcIo,EcNo,RSSI,RSCP等常见参数详解
  18. Android蓝牙开发的各种坑
  19. java-斗地主无界面无序
  20. INA219 技术笔记

热门文章

  1. python中文转16进制_Python 16进制与中文相互转换的实现方法
  2. Java实验6 接口、异常处理、注解与反射答案
  3. 最大疯子树:树形DP优化:二次扫描+换根法(poj3585)
  4. 假如有人把支付宝存储服务器炸了,里面的钱是不是就都没有了?
  5. 下面合法的C语言字符常量是( ),C语言考试题库及答案
  6. 正确思维,和非理性自我斗争
  7. c语言1017错误什么意思,错误 C1017
  8. 在sql执行横表转换过程中,出现特殊字符‘∞’
  9. Linux搭建socks 5代理服务器及使用
  10. unity 人物走动声音_Unity3D实现人物走动 教程