1.什么是索引

索引用于快速找出在某个列中有一特定值的行。如果不使用索引,需要遍历整张表,表越大查询耗时越大;

MySQL中的索引的存储类型有两种:BTREE、HASH。具体实现机制参照另一篇博客;

2.索引的优缺点分析和使用原则

 优点:

  • 任意字段可以设置索引
  • 索引可以大大加快查询

 缺点:

  • 创建、维护索引需要额外耗时,并且耗时随数据量明显增加
  • 索引需要占据空间,导致提前达到数据最大上线值
  • 数据增、删、改需要维护索引,维护速度降低

使用原则:

   1. 更新频繁的表应该避免过度索引,对查询频繁的字段应该创建索引;

2. 数据量小的表不需要索引;

3. 不同值少的列上(字段上)不要建立索引,例如学生表的"性别"字段上只有男,女两个不同值,无需设置索引;

3.索引分类

   索引是在存储引擎中实现的,也就是说不同的存储引擎,会使用不同的索引;

MyISAM和InnoDB存储引擎:只支持BTREE索引

MEMORY/HEAP存储引擎:支持HASH和BTREE索引

索引分类 定义 说明
单列索引

普通索引:字段没限制,允许在定义索引列中插入重复值、空值;

唯一索引:索引列中的值必须是唯一的,但允许为空值;

主键索引:索引列值必须唯一,不允许为空

一个索引包含单列,但一张表可以有多个索引
组合索引 表中的多个字段组合上创建的索引 使用组合索引时遵循最左前缀集合
全文索引 在一堆数据中,通过某个关键字等,就能找到该字段所属的记录行 MyISAM引擎上才能使用,只能在CHAR,VARCHAR,TEXT类型字段上使用全文索引
空间索引 空间索引是对空间数据类型的字段建立的索引, MySQL中的空间数据类型有四种,GEOMETRY、POINT、LINESTRING、POLYGON

参考:

https://www.cnblogs.com/whgk/p/6179612.html

https://blog.csdn.net/waeceo/article/details/78702584

MySql索引基本的更多相关文章

  1. 深入MySQL索引

    MySQL索引作为数据库优化的常用手段之一在项目优化中经常会被用到, 但是如何建立高效索引,有效的使用索引以及索引优化的背后到底是什么原理?这次我们深入数据库索引,从索引的数据结构开始说起. 索引原理 ...

  2. MySQL 索引

    MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度. 打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是 ...

  3. MYSQL索引结构原理、性能分析与优化

    [转]MYSQL索引结构原理.性能分析与优化 第一部分:基础知识 索引 官方介绍索引是帮助MySQL高效获取数据的数据结构.笔者理解索引相当于一本书的目录,通过目录就知道要的资料在哪里, 不用一页一页 ...

  4. MySQL索引原理及慢查询优化

    原文:http://tech.meituan.com/mysql-index.html 一个慢查询引发的思考 select count(*) from task where status=2 and ...

  5. 【转】MySQL索引背后的数据结构及算法原理

    摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BT ...

  6. [转]MySQL索引背后的数据结构及算法原理

    摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BT ...

  7. MySQL索引类型总结和使用技巧以及注意事项

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

  8. MySQL索引背后的数据结构及算法原理【转】

    本文来自:张洋的MySQL索引背后的数据结构及算法原理 摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持 ...

  9. mysql索引总结----mysql 索引类型以及创建

    文章归属:http://feiyan.info/16.html,我想自己去写了,但是发现此君总结的非常详细.直接搬过来了 关于MySQL索引的好处,如果正确合理设计并且使用索引的MySQL是一辆兰博基 ...

  10. Mysql 索引实现原理. 聚集索引, 非聚集索引

    Mysql索引实现: B-tree,B是balance,一般用于数据库的索引.使用B-tree结构可以显著减少定位记录时所经历的中间过程,从而加快存取速度.而B+tree是B-tree的一个变种,My ...

随机推荐

  1. Python量化交易的简单介绍

    Python只是一门技术. 一.量化交易的发展 1.国外量化金融领域发展日趋成熟. 2.近几年量化交易在国内掀起热潮. 3.Python作为量化交易的编译语言. 二.什么是量化交易 1.利用计算机强大 ...

  2. POJ 1423:Big Number 求N的阶乘的长度 斯特林公式

    Big Number Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 27027   Accepted: 8626 Descr ...

  3. 【Java Spring 进阶之路 】1.Spring 是什么?

  4. json - json对象和json字符串直接的相互转换

    一.json字符串转json对象 1.json字符串转json对象 var obj = JSON.parse(str); //由json字符串转换为json对象 2.获取对象的value consol ...

  5. java向量 vector

    Vector 向量 是java.util 包里的一个类,该类继承AbstractList,实现了类似动态数组的功能. 向量和数组相似,都可以保存一组数据,但数组的大小(长度)是固定的,而Vector ...

  6. jvm 优化

    1.jvm 运行参数 1.1 jvm 参数类型 1.1.1 标准参数 -help -version 1.1.2 -X参数(非标准参数) -Xint -Xcomp 1.1.3-XX参数(使用率高) -X ...

  7. bzoj 3876: [Ahoi2014]支线剧情

    就是加一个1的下界就好了. #include<bits/stdc++.h> #define N 100005 #define LL long long #define inf 0x3f3f ...

  8. 在Centos7下源代码安装配置Nginx

    1.安装前准备开发环境安装pcre开发包:yum install -y pcre-devel 安装编译源码所需的工具和库:yum install gcc gcc-c++ ncurses-devel p ...

  9. 服务器io资源查看

    资源查看命令安装 yum provides /usr/bin/find #查看命令是哪个软件包安装的 执行 yum provides */netstat 命令就可以看到提供命令的工具包net-tool ...

  10. Unity 可重复随机数

    出处 https://blogs.unity3d.com/cn/2015/01/07/a-primer-on-repeatable-random-numbers/   (英文原版) http://ww ...