zoukankan      html  css  js  c++  java
  • 数据库索引(转载)

    原文地址:https://my.oschina.net/gooke/blog/678556

    以下内容为个人笔记:)


    场景:

    有张数据表employee,里面有3列Employee_Name,Employee_Age,Employee_Address,有上万行的记录

    现在想找出叫Jesus的员工:

      SELECT * FROM Employee WHERE Employee_Name = 'Jesus'

    没有索引的话

    数据库会逐行遍历整张表,找Employee_Name = 'Jesus'的员工,并且找到了也不会停止,做全表扫描

    索引:
    ~~索引就是数据结构~~

    索引是基于数据表中的某一列创建的,并且这些数据存储在某个数据结构中。

    使用哪种数据结构呢?

    B- 树是用于索引最常见的数据结构(高效、有序...)。但也可以自己指定。

    HASH索引也不错,对于比较字符串很快,但一定范围的做不到。R- 树索引通常用来解决空间问题。

    索引为啥能提高效率呢

    索引的本质是 存储列值的数据结构。像B-树的数据结构,是有序的,会把列值按字母顺序排序,所以大大的缩减了查找时间。

    索引里还存了些啥

    列值+对应行的指针

    数据库咋知道啥时候使用索引

    数据库会自己判断,首先判断这个列有没有设置索引,再判断值不值的用(比如有些时候做全表扫描要比使用数据库索引高效)。

    当然啦也可以强迫数据库使用索引

    如何创建索引

    CREATE INDEX name_index ON Employee (Employee_Name)

    联合索引:CREATE INDEX name_index ON Employee (Employee_Name, Employee_Age)

    使用索引的代价

    占空间+影响数据库性能(索引的值要与数据库保持一致,所以只要对表做了增删改,在索引上也要来一遍)

  • 相关阅读:
    「日常训练」Single-use Stones (CFR476D2D)
    「日常训练」Greedy Arkady (CFR476D2C)
    「Haskell 学习」二 类型和函数(上)
    「学习记录」《数值分析》第二章计算实习题(Python语言)
    「日常训练」Alena And The Heater (CFR466D2D)
    Dubbo 消费者
    Dubbo 暴露服务
    Rpc
    git fail to push some refs....
    Spring Cloud (6)config 客户端配置 与GitHub通信
  • 原文地址:https://www.cnblogs.com/mogujiang/p/7778157.html
Copyright © 2011-2022 走看看