zoukankan      html  css  js  c++  java
  • 索引的选择

    1,什么是索引:

    索引就是帮助DBMS高效检索数据的数据结构

    2,索引分类

    (1)普通索引:允许重复的值出现

    (2)唯一索引:除了不允许重复的记录以外,其他和普通索引一样

    (3)主键索引:给主键所在的列设置索引

    (4)全文索引:用来对表中的文本域(char,varchar,text)设置索引

    3,使用索引的弊端

    (1)占用空间

    (2)对dml(drop,modify,Insert)操作有影响,变慢

    4,索引的使用场景

    (1)在where条件中经常使用(如果不做查询就没有意义)

    (2)字段的内容不是固定的几个值

    (3)字段的内容不会频繁改变

    5,举例说明

    在1,2 ,3 ,3 ,4,2,3,4,5这些数中查找‘2’;

    不加索引时:会从第一个数检索到最后一个数,把两个2 找出来

    加索引时:会在排好序的数列“1,2,2,3,3,3,4,4,5”中从头找直到第一个3(2后面的一个数)为止

    可见加索引比不加索引效率要高

    6,索引实现原理

    (1)btree(Balance Tress)索引:通过建立平衡树实现排序,利用平衡树加快查询速度【时间复杂度是平衡树的高度】

    (2)hash索引(被应用于Memory搜索引擎):底层是crc16算法,由这个算法生成唯一的值完成hash索引

    Memory搜索引擎:内存数据表搜索引擎(电脑重启数据就会丢失)

    hash函数根据id(索引列)返回保存map<hash值,list<行指针>>,返回一个地址(map的物理地址)

    返回的地址可能会发生冲突:不同的id返回相同的地址

    他是采用链表来解决冲突

    在查找的时候:hash函数根据id获取map的地址,在map中获取所需要的值

    所以在理论上(不发生冲突的情况下)时间复杂度为O(1),就是只查找1次

    7.memory搜索引擎的缺点:

    (1)会发生地址冲突,一旦发生地址冲突,代价就会增加,

    (2)具有局限性,只能用于等值比较,不可以用于范围查找(“=”,“<=",">=”,“in()”)

    特点:高效

     

  • 相关阅读:
    redis 报错随笔
    ElasticSearch restful实操 随笔
    phantomjs
    Linux环境安装安装NodeJS v10.16.3
    huawei 策略路由随笔
    eleasticsearch 安装-随笔
    cmake编译安装mysql
    postgres主从配置
    postgresql数据库部署
    redis环境部署
  • 原文地址:https://www.cnblogs.com/excellencesy/p/9117498.html
Copyright © 2011-2022 走看看