索引的数据结构:

(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. OpenStack Cirros

    Cirros Openstack的开发,基本都使用这个image来测试,因为他比较小,只有10M. 镜像介绍 镜像的地址: https://launchpad.net/cirros/trunk/0.3 ...

  2. jdbc操作步骤

    package com.itheima.test; import java.sql.Connection; import java.sql.DriverManager; import java.sql ...

  3. jQuery jQuery on()方法

    jQuery on()方法是官方推荐的绑定事件的一个方法. $(selector).on(event,childSelector,data,function,map) 由此扩展开来的几个以前常见的方法 ...

  4. mac下远程win8.1时提示"桌面连接无法验证您希望连接的计算机的身份"的解决办法

    在os x下使用远程桌面到win8.1,总出现“远程桌面连接无法验证您希望连接的计算机的身份”的提示. 解决方法:1.网上各种解释,包括防火墙是否打开,是否去掉“仅允许运行使用网络级别身份验证的远程计 ...

  5. Docker for mac 安装 kong

    首先安装一个 PostgreSQL,选的版本是 9.5 $ docker run -d --name kong-database \ -p : \ -e "POSTGRES_USER=kon ...

  6. ssm(Spring、Springmvc、Mybatis)实战之淘淘商城-第十四天(非原创)

    文章大纲 一.淘淘商城总体架构介绍二.淘淘商城重要技术点总结三.项目常见面试题四.项目学习(all)资源下载五.参考文章 一.淘淘商城总体架构介绍 1. 功能架构   2. 技术选型 (1)Sprin ...

  7. ssm(Spring、Springmvc、Mybatis)实战之淘淘商城-第九天(非原创)

    文章大纲 一.课程介绍二.今日功能介绍三.项目源码与资料下载四.参考文章 一.课程介绍 一共14天课程(1)第一天:电商行业的背景.淘淘商城的介绍.搭建项目工程.Svn的使用.(2)第二天:框架的整合 ...

  8. juypter-notebook安装配置

    juypter-notebook安装配置 Table of Contents 1. jupyter notebook概述 2. jupyter notebook安装 3. 在jupyter noteb ...

  9. agc016B - Colorful Hats(智商题)

    题意 题目链接 有$n$个人,每个人有一种颜色,第$i$个人说除了我之外有$a_i$种不同的颜色,问是否存在一组合法解 Sol 700分的题就这么神仙了么..好难啊... 先说结论吧 设$mx, mn ...

  10. 查看mysql表大小

    //先进去MySQL自带管理库:information_schema //自己的数据库:dbwww58com_kuchecarlib //自己的表:t_carmodelparamvalue mysql ...