zoukankan      html  css  js  c++  java
  • Mysql基础知识—索引

      公司最近开始尝试进行改革,如何活跃团队气氛。开发就给我们说了一些算是科普类的数据库知识,下面参杂自己的理解,方便自己后续翻看。
     
    1、什么是索引  
      索引在MySQL中也叫做“键”,是存储引擎用于快速找到记录的一种数据结构。(注:以下的说明主要针对的是B+树索引)
      
    2、索引的用途
      索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要。索引优化应该是对查询性能优化最有效的手段了。索引能够轻易将查询性能提高好几个数量级。索引相当于字典的音序表,如果要查某个字,如果不使用音序表,则需要从几百页中逐页去查。
     
    3、索引的原理
    a、二叉树
    b、字典的索引理解(此处省略一万字,简单的来说就是不停的拆分,粒度越小越好)
        
    4、索引的创建
    a、索引不是越多越好
      只从读的角度考虑,其实索引是越多越好的。综合考虑的话就不是这样了:
      首先就是存储空间的问题,索引越多,占用的存储空间越大(一般一张数据库的表存储空间分开两块,一块是存储索引的,一块是存储数据的)。
      其次是新增和修改数据的时候,如果索引字段有变更的话,对I/O的操作会造成几何倍的增加。
     
    b、索引字段最好是数字
      数字类索引占用的空间最小。其实还是和多叉树的数据分配有关,字符类的索引树层级不稳定。
     
    c、索引要选择不经常变更的字段
      见 4.a
     
    d、索引建立在离散度大的字段上
      离散度的树的分叉才能多,索引命中率才会高。(离散度我的理解是数据分布相对于整个数据集的比例,数据的分散程度越大,越有代表性)
     
    e、索引的最左原则
      这是索引中很重要的一个特性,即索引的匹配是从左到右的。比如一个联合索引由('name','sex','age')组成,如查询('女','24')这样的数据,数据库找不到最开始的name,那么这条SQL就不会用到索引。如果查询('青莲','23')这样的数据,数据库会先找到名字是“青莲”的数据,然后发现缺少B,就会把所有名字是青莲的数据找出来,然后再去匹配age=23的数据。
     
    f、关于索引排序
      这是随着公司业务发展而衍生出来的一个东西,我也是第一次知道索引这东西还能通过排序去进一步优化。例如A&B&C三个字段组成的联合索引,可以把A&B索引出来的数据,通过排序,然后在用C去检索。当然只针对查询的性能来说,和检索A&B&C是几乎一样,但是针对特殊业务场景,还是可以这样做的(例如在满足A&B索引的条件下,一个动态的id,每次只取前20条数据)  
     
    g、关于查询尽量只查用到的字段
      我们一直听到的是select尽量别用星号(*),但其实这里消耗的性能并没有我们想象的那么多。
      上面说过,表的存储空间分为两块(索引和数据),所以如果我们需要查询的数据在索引字段中就有了,那么就没必要再去数据那边跨区查找了,这部分的查询消耗资源就能大幅度节约。
     
  • 相关阅读:
    未能加载文件或程序集''file:///D:/Program Files (x86)/ArcGIS/DeveloperKit10.0/DotNet/ESRI.ArcGIS.ADF.Local.dll'' 或它的某一个依赖项。试图加载格式不正确的程序。
    [GL]三维场景的组织
    一张图,把我震惊了【转】
    [WorldWind学习]8.Cache对象
    [WorldWind学习]6.World类
    七桥问题及一笔画
    VS下Qt4.8.4安装
    [WorldWind学习]5.相机对象
    [WorldWind学习]1.接触WorldWind项目
    [WorldWind学习]2.WorldWindow控件
  • 原文地址:https://www.cnblogs.com/zichuan/p/10079752.html
Copyright © 2011-2022 走看看