索引的数据结构:

(1)一般是B+tree:MySql使用最频繁的一个索引数据结构,数据结构以平衡树的形式来组织,因为是树型结构,所以更适合用来处理排序,范围查找等功能.

(2)Hash:Hsah索引在MySql比较少用,他以把数据的索引以Hash形式组织起来,因此当查找某一条记录的时候,速度非常快。

对比:

相对Hash索引,B+树在查找单条记录的速度虽然比不上Hash索引,但是因为更适合排序等操作,所以他更受用户的欢迎。毕竟不可能只对数据库进行单条记录的操作。

索引的初衷,优缺点:

索引的初衷是为了提升检索效率,而索引的优点也是如此;

索引的缺点也十分明显,就是它所生成的索引文件会占用大量的磁盘空间,并且在对SELECT以外的操作时会相对的降低了效率。

最后可理解为:索引在提高查询速度的同时,降低了增删改三者的执行效率。

Mysql共支持五种索引类型:

1.PRIMARY KEY 主键索引

2.INDEX 普通索引

 3.UNIQUE 唯一索引

4.FULLTEXT 全文索引

5.组合索引(较特殊)

值得注意的是,InnoDB引擎支持全文索引是在MySql5.6之后,之前的版本建议使用MyISAM引擎。

五大索引的功能:

主键索引:主键是一种唯一性索引,每个表只能有一个主键,在单表查询中,PRIMARY主键索引与UNIQUE唯一索引的检索效率并没有多大的区别,但在关联查询中,PRIMARY主键索引的检索速度要高于UNIQUE唯一索引。

普通索引:这是最基本的索引类型,而且它没有唯一性之类的限制。

唯一索引:这种索引和前面的“普通索引”基本相同,但有一个区别:索引列的所有值都只能出现一次,即必须唯一。

全文索引:MySql从3.23版开始支持全文索引和全文检索。全文索引只可以在VARCHAR或者TEXT类型的列上创建。

对于大规模的数据集,通过ALTER TABLE(或者CREATE INDEX)命令创建全文索引要比把记录插入带有全文索引的空表更快。

CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name
[USING index_type]
ON table_name (index_col_name,...)

组合索引:在索引的创建中,有两种场景,即为单列索引和多列索引,下面我们来举例一个场景:

在一个user用户表中,有nice,age,sex三个字段,他们分别三次建立了INDEX 普通索引,那么在数据查询中,select * from user where nice = '' AND age = '' AND sex = '';中就会分别检索三条索引,虽然比起唔索引的全盘扫描效率有所提升,但却还是不够的。这个使用就需要使用到组合索引,既多列索引:

create table user(
nice varchar(9),
age int(3),
sex tinyint(1),
index user(nice, age, sex)
);

这个时候再使用上面的查询语句,就只会一次检索三条索引,直到找出相应的数据返回。

在MySql中,有一样基础的知识点叫最左原则:什么是最左原则?我们来看下一条select语句:

select * from user where nice = '' AND age = '' AND sex = '';

可以很简单的理解为,where的条件时依次从左往右执行的

再来看一条组合索引:index user(nice, age, sex)

从查询中,nice,age,sex的顺序必须如组合索引中一致排序,否则索引将不会生效,例如:

select * from user where age = '' AND nice = '' AND sex = '';

如果你是以上的查询,这条组合索引将无效化,所以我们一般建立了索引时,要先想好相应的查询业务先哦。

索引的运用场景:

并不是所有字段都适合建立索引:

1、索引只建立在经常用到的条件字段中;

2、并不是所有主键索引都需要设置自增,并且不是所有表都适合建立主键字段,例如中间表。

3、并不是所有表都需要组合索引,这需要根据你的查询业务来进行关联(新手可以先建单列索引,业务完成后再建组合索引提高查询速度)

4、join对称建立索引,例如:A表的ID建立了索引,那么B表的PID也应该建立索引

mysql索引详细描述与应用场景的更多相关文章

  1. Mysql 索引详细解释

    MySQL索引详解(优缺点,何时需要/不需要创建索引,索引及sql语句的优化)  一.什么是索引? 索引是对数据库表中的一列或多列值进行排序的一种结构,使用索引可以快速访问数据库表中的特定信息. 二. ...

  2. Mysql索引详细语法

    索引相关命令 - 查看表结构 desc 表名 - 查看生成表的SQL show create table 表名 - 查看索引 show index from 表名 - 查看sql执行时间 set pr ...

  3. MySQL索引失效的几种场景

    我们都知道建立索引能够提高查询效率,那么是不是任何情况下都能提高呢,当然不是的的,下面我们就来列举一些常见的索引失效的场景. 借用上一篇文章的dm_person_info表 在card_code列没加 ...

  4. mysql索引详细介绍

    博客: https://blog.csdn.net/tongdanping/article/details/79878302#%E4%B8%89%E3%80%81%E7%B4%A2%E5%BC%95% ...

  5. 0x08 MySQL 超详细-索引原理&慢查询优化【转-多图】(重点)

    Content From——Egon's Blog http://www.cnblogs.com/linhaifeng/articles/7274563.html#top 0x01 介绍 为何要有索引 ...

  6. 【详细解析】MySQL索引详解( 索引概念、6大索引类型、key 和 index 的区别、其他索引方式)

    [详细解析]MySQL索引详解( 索引概念.6大索引类型.key 和 index 的区别.其他索引方式) MySQL索引的概念: 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分 ...

  7. 单表扫描,MySQL索引选择不正确 并 详细解析OPTIMIZER_TRACE格式

    单表扫描,MySQL索引选择不正确 并 详细解析OPTIMIZER_TRACE格式     一 表结构如下:  万行 CREATE TABLE t_audit_operate_log (  Fid b ...

  8. MySQL索引的分类、结构、使用场景

    MySQL索引分类 1.主键索引:设定为主键后数据库会自动建立索引,innodb为聚簇索引 语法: 随表一起建索引: CREATE TABLE customer (id INT(10) UNSIGNE ...

  9. MySQL索引优化,explain详细讲解

    前言:这篇文章主要讲 explain 如何使用,还有 explain 各种参数概念,之后会讲优化 一.Explain 用法 模拟Mysql优化器是如何执行SQL查询语句的,从而知道Mysql是如何处理 ...

随机推荐

  1. Bonetrousle HackerRank 数学 + 思维题

    https://www.hackerrank.com/contests/world-codesprint-6/challenges/bonetrousle 给定一个数n,和k个数,1--k这k个,要求 ...

  2. Unity (反向动力学)IK动画

  3. Raymond Mill In Lisp

    Raymond Mill is suitable for producing minerals powder, which is widely used in the metallurgy, buil ...

  4. CentOS Linux解决Device eth0 does not seem to be present【转】

    在VMware里克隆出来的CentOS Linux,ifconfig...没有看到eth0,然后重启网卡又报下面错误. 故障现象: service network restartShutting do ...

  5. Storm概念学习系列之Storm与Hadoop的角色和组件比较

    不多说,直接上干货! Storm与Hadoop的角色和组件比较 Storm 集群和 Hadoop 集群表面上看很类似.但是 Hadoop 上运行的是 MapReduce 作业,而在 Storm 上运行 ...

  6. jQuery对ajax的支持

    有load,get,post和ajax四个方法都可以,其中后三个直接使用$.xx调用 使用方法大致相同,这里只介绍get和post方法 -------------------------------- ...

  7. Docker | 第零章:前言

    说在前面 对于一个后端开发者而言,对于Docker也是前年十月份才开始听说的(很惭愧,Docker在2013年就已经出现了).当时有个新项目启动,领导们在技术选型时,在部署方面选定的是Docker.那 ...

  8. EditPlus常用操作

    EditPlus注册码在线生成 http://www.jb51.net/tools/editplus/ 随意填写个用户名,生成对应的密码就可以使用editplus了 EditPlus常用快捷键 编代码 ...

  9. metaclass元类解析

    一.创建类的流程 二.什么是元类 在Python3中继承type的就是元类 示例 # 方式一 class MyType(type): '''继承type的就是元类''' def __init__(se ...

  10. 【Android车载系统 News | Tech 5】车载设计开发

    1. 基于Android的车载移动终端系统的研究与开发 http://wenku.baidu.com/link?url=hIKlQ2myEmR8N0CA28a_SLzLA2Q9R5Xpk20OJ53h ...