zoukankan      html  css  js  c++  java
  • SQL 索引的建立

    1)什么是索引

    索引是易中特殊的文件,他们包含着对数据表里所有记录的引用指针,更通俗的说,索引就相当于目录,当你使用新华字典时,帮你把目录撕掉了,你查询某个字开头的成语只能从第一页翻到第一千页,如果把目录还给你,则能快速定位

    2)索引的优缺点

     优点: 可以大大的加快数据的检索速度,这也是创建索引的最重要的原因,而且通过索引可以在查询过程中,使用优化隐藏器,提高系统的性能。

     缺点:索引需要额外的维护成本,因为索引文件是单独存在的文件,对数据的增删改查,都会产生额外的对索引文件的操作,这些操作需要消耗额外的IO,会降低增删改查的执行效率

    3)索引的基本原理

    索引用来快速的寻找那些具有特性值的记录,如果没有索引,一般来说执行查询时遍历整张表。

    索引的原理很简单,监是把无需的数据变成有序的的查询

    1.把创建了索引的咧的内容进行排序

    2.堆排序结果生成倒排序表

    3.在倒排表内容上拼上数据地址链

    4.在查询的时候,先拿到排序表内容,再提取除数地址链,从而拿到数据

    4)聚集索引和非聚集索引的区别

    1.聚集索引

    聚集索引只能具有一个,为什么只能具有一个,是因为创建聚集索引的时候,数据库表会按照聚集索引进行物理排序,一个表的排序只能是一个物理排序,不可能说,即按照Id排序,又按照创建时间进行倒序排序,这本身就是冲突的,通过使用聚集索引进行查询,只需要查询一次即可返回结果。

    2.非聚集索引

    非聚集索引是可以具有多个的,针对表创建非聚集索引的时候,是在数据库里面创建了一个索引页,这个索引页存储的就是某一列,或者某几列的一个排序数据,并且,每个数据指向表中具体的某一条记录的地址,这样通过非聚集索引查询的时候,会优先向索引页中进行查询,查询出结果之后,根据记录指向的地址,再次寻找表中的具体数据,非聚集索引是需要查询两次的,先查询索引页,然后再次查询索引页结果指向的地址

    5)创建索引的原则,索引虽然好,但是也不是无限制的使用,最好符合以下几个原则

    1.最左前缀匹配原则,组合索引非常重要的原则,数据库会一直向有匹配知道遇到范围查询(>,<,between,like)就停止匹配,例如:where a=1 and b=2 and c>3 and d=4 如果建立(a,b,c,d)顺序的组合索引,d是用不到索引的,如果建立(a,b,d,c)顺序的组合索引,则都可以用到,a,b,d三者之间是没有顺序之分的

    2.更新较频繁字段不适合创建索引

    3.较频繁作为查询条件的字段才能去创建索引

    4.若是不能有效区分数据的列不适合做索引列(如性别,男,女,未知,最多也就三种、区分度太低)

    5.尽量的扩展索引,不要新建索引。比如表中已经有了a的索引,现在要添加组合索引(a,b)的索引,那么只需要修改原来的a索引为(a,b)就可以了

    6.定义有外键的数据列一定要建立索引

    7.对于那些查询中很少涉及的列,重复值比较多的列不要建立索引

    8.对于定义为text,image和bit的数据类型的列不要建立索引

    6.如何删除表中大量的数据(例如一次要删除百万数据)

    1.先删除表中所有索引

    2.删除表中数据

    3.再创建表中的索引

    7.不要在正在运行数据库表中(特别是数据量大的表)新建索引,很可能会导致线上不能访问数据库,导致程序出现无法访问现象

    1.因为新建索引会为表添加锁,导致其它的新增,更新操作一直等待,最后超时

    7.看到网上说创建索引的时候,添加

  • 相关阅读:
    Django ORM常用的函数以及修饰词
    通过gitlabAPI批量创建用户
    【BZOJ】ARC083 E
    【Atcoder】ARC083 D
    【BZOJ】1604: [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居
    【BZOJ】1593: [Usaco2008 Feb]Hotel 旅馆
    【BZOJ】5010: [Fjoi2017]矩阵填数
    【Atcoder】ARC082 E
    【BZOJ】5028: 小Z的加油店
    【BZOJ】1691: [Usaco2007 Dec]挑剔的美食家
  • 原文地址:https://www.cnblogs.com/notyourdog/p/10417620.html
Copyright © 2011-2022 走看看