zoukankan      html  css  js  c++  java
  • 5.索引简介

    索引是什么:

      1.MySQL官方对索引的定义为:索引(Index) 是帮助MySQL高效获取数据的数据结构

      2.可以理解为  “排好序的快速查找数据结构”  

        索引是排好序的,能够用于快速查找的数据结构,索引可以帮助我们两点:

        1.对于需要排序的相关的命令,可以减轻cpu的负担

        2.可以加快查询速度,减少IO操作

          无索引,直接去读表数据存放的磁盘块,读到数据缓冲区中再查找需要的数据。

          有索引,先读入索引表,通过索引表直接找到所需数据的物理地址,并把数据读入数据缓冲区中

      数据本身之外,数据库还维护着一个满足特定查找算法的数据结构,这些数据结构以某种方式指向数据

      这样就可以在这些数据结构的基础上实现高级查找算法,这种数据结构就是索引

      3.一般来说索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储在磁盘上

      4.我们平常所说的索引,如果没有特别指明,都是指B树(多路搜索树,并不一定是二叉的)结构组织的索引

      其中聚集索引、次要索引、覆盖索引,复合索引,前缀索引,唯一索引默认都是使用B+树索引,统称索引

      当然,除了B+树这种类型的索引之外,还有哈希索引(hash  index 等)

    优势:

      1.类似大学图书馆建书目索引,提高数据检索的效率,降低数据库的IO成本

      2.通过索引列队数据进行排序,降低数据排序的成本,降低CPU的消耗

    劣势:

      1.实际上索引也是一张表,该表有主键 和 索引 两个字段,并指向实体表的记录,所以索引列也是要占空间的

      2.虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERTUPDATE和DELETE。

      因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件每次更新添加了索引列额字段

      都会调整因为更新所带来的键值变化后的索引信息

      3.索引只是提高效率的一个因素,如果你的MySQL有大数据量的表,

       就需要花时间研究建立最优秀的索引,或者优化查询语句

    MySQL索引分类: 

      1.单值索引   即一个索引只包含单个列,一个表可以有多个单值索引

      2.唯一索引   索引列的值必须唯一,但允许有空值

      3.复合索引   即一个索引包含多个列

    基本语法:

      创建:

        CREATE  [UNIQUE]  INDEX  indexName  ON  tableName(columnName(length))

        ALTER  tableName  ADD  [UNIQUE]   INDEX  [indexName]  ON  (columnName(length))

      删除:

        DROP  INDEX  [indexName]  ON   tableName

      查看:
        SHOW  INDEX  FROM  tableName

      

    MySQL索引结构:

      B+Tree索引   ----  检索原理 (后面一篇文章解释)

      Hash索引

      full-text 全文索引

      R-Tree 索引 

    哪些情况下需要创建索引

      1.主键自动建立唯一索引

      2.频繁作为查询条件的字段应该创建索引

      3.查询中与其他表关联的字段,外键关系建立索引

      4.Where 条件 里用不到的字段不创建索引

      5.单值/复合 索引的选择问题  (在高并发下倾向创建复合索引)

      6.查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度

      7.查询中统计或者分组字段

    哪些情况不要创建索引

      1.表记录太少,记录太少,用了索引也没什么效果

      2.经常增删改的表,对表的更新,MySQL不仅要保存数据,还要保存一下索引文件

      3.数据重复且分布平均的表字段,因此应该只为最经常查询和最经常排序的数据列建立索引

      注意:如果某个数据列包含许多重复的内容,为它建立索引就没有太大的效果

      

     

  • 相关阅读:
    2013.4.15 Particle Swarm Optimization with Skyline Operator for Fast Cloudbased Web Service Composition
    Adaptive service composition in flexible processes
    2013.4.13 DomainSpecific Service Selection for Composite Services
    2013.4.14 Modeling and Algorithms for QoSAware Service Composition in VirtualizationBased Cloud Computing
    2013.5.29 Towards Networkaware Service Composition in the Cloud
    Efficient algorithms for Web services selection with endtoend QoS constraints
    SQL Server中常用的SQL语句
    接口限流自定义注解
    linux服务器生产环境搭建
    MVEL自定义函数重复掉用报错:duplicate function
  • 原文地址:https://www.cnblogs.com/xuzekun/p/7364295.html
Copyright © 2011-2022 走看看