• Mysql 索引


    原文:mysql索引详解

    一. 索引的定义

      索引用于快速找出在某个列中有一特定值的行

      不使用索引,MySQL必须从第一条记录开始读完整个表,直到找出相关的行,表越大,查询数据所花费的时间就越多,

      如果表中查询的列有一个索引,MySQL能够快速到达一个位置去搜索数据文件,而不必查看所有数据,那么将会节省很大一部分时间。

      MySQL中的索引的存储类型有两种:B+TREEHASH

    二. 优缺点

    1. 优点

    1. 所有的MySql列类型(字段类型)都可以被索引,也就是可以给任意字段设置索引
    2. 提高数据的查询速度

    2. 缺点

    1. 创建索引和维护索引要耗费时间,并且随着数据量的增加所耗费的时间也会增加
    2. 索引也需要占用空间,我们知道数据表中的数据也会有最大上线设置的,如果我们有大量的索引,索引文件可能会比数据文件更快达到上线值
    3. 当对表中的数据进行增加、删除、修改时,索引也需要动态维护,降低了数据的维护速度。

    3. 使用原则

    1. 经常更新的表减少索引的设置,对经常用于查询的字段应该创建索引
    2. 数据量小的表最好不要使用索引,因为由于数据较少,可能查询全部数据花费的时间比遍历索引的时间还要短,索引就可能不会产生优化效果。
    3. 相同值多的列上(字段上)不要建立索引,比如在学生表的"性别"字段上只有男,女两个不同值。相反的,在一个字段上不同值较多可是建立索引。

    三. 索引分类

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

       MyISAMInnoDB存储引擎:只支持B+TREE索引, 也就是说默认使用B+TREE,不能够更换

       MEMORY和HEAP存储引擎:支持HASHB+TREE索引

    1、索引我们分为四类来讲 单列索引(普通索引,唯一索引,主键索引)、组合索引、全文索引、空间索引、

    1.1、单列索引:一个索引只包含单个列,但一个表中可以有多个单列索引。 

       1.1.1、普通索引

          MySQL中基本索引类型,没有什么限制,允许在定义索引的列中插入重复值和空值,纯粹为了查询数据更快一点。

       1.1.2、唯一索引

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

       1.1.3、主键索引

          是一种特殊的唯一索引,不允许有空值。

    1.2、组合索引

         在表中的多个字段组合上创建的索引,只有在查询条件中使用了这些字段的左边字段时,索引才会被使用,使用组合索引时遵循最左前缀集合。

           最左前缀:查询条件中的所有字段需要从左边起按顺序出现在多列索引中,查询条件的字段数要小于等于多列索引的字段数,中间字段不能存在范围查询的字段((>、<、between、like)

         在创建多列索引时,要根据业务需求,where子句中使用最频繁的一列放在最左边

         mysql查询优化器explain,explain会纠正sql语句该以什么样的顺序执行效率最高,最后才生成真正的执行计划。

    1.3、全文索引

      全文索引,只有在MyISAM引擎上才能使用,只能在CHAR,VARCHAR,TEXT类型字段上使用全文索引,介绍了要求,说说什么是全文索引,

      就是在一堆文字中,通过其中的某个关键字等,就可能找到该字段所属的记录行,比如有"你是个大煞笔,二货 ..." 通过大煞笔,可能就可以找到该条记录。

      这里说的是可能,因为全文索引的使用涉及了很多细节,我们只需要知道这个大概意思。

    1.4、空间索引

      空间索引是对空间数据类型的字段建立的索引,MySQL中的空间数据类型有四种,GEOMETRY、POINT、LINESTRING、POLYGON。

      在创建空间索引时,使用SPATIAL关键字。

      要求,引擎为MyISAM,创建空间索引的列,必须将其声明为NOT NULL。   

  • 相关阅读:
    Centos 8 部署harbor 访问502
    selenium学习记录
    shell基础
    抓取人民日报
    caffe在笔记本ubuntu10.04 64位下的无GPU安装
    【转】HMM
    typedef 的一些用法
    j2ee 使用tomcat开发网站需要访问中文名的资源遇到的问题解决方案。。
    解决lex.yy.c文件在vs2012下编译生成exe
    python学习
  • 原文地址:https://www.cnblogs.com/virgosnail/p/9673057.html
Copyright © 2020-2023  润新知