数据库索引

Hash索引和**B+**树索引

B+树 是最常用于索引的数据结构,时间复杂度低:查找、删除、插入操作都可以可以在 logn 时间内完成。另外一个重要原因存储在 B+树 中的数据是有序的

哈希索引就是采用一定的哈希算法,把键值换算成新的哈希值,检索时不需要类似B+树那样从根节点到叶子节点逐级查找,只需一次哈希算法即可立刻定位到相应的位置,速度非常快。

哈希索引优点:

          系索引的工作方式是将列的值作为索引的键值(key),键值相对应实际的值(value)是指向该表中相应行的指针。

哈希索引缺点:

        哈希表是无顺的数据结构,对于很多类型的查询语句哈希索引都无能为力;(假如你想要找出所有小于40岁的员工。无法使用使用哈希索引进行查询,因为哈希表只适合查询键值对,也就是说查询相等的查询)

  • (1)不支持范围查询
  • (2)不支持索引完成排序
  • (3)不支持联合索引的最左前缀匹配规则

 

R索引和位图索引:

   R 树通常用来为空间问题提供帮助。例如,一个查询要求“查询出所有距离我两公里之内的麦当劳”,如果数据库表使用R树索引,这类查询的效率将会提高。

位图索引(bitmap index), 这类索引适合放在包含布尔值(true 和 false)的列上。

索引的存储:

库索引是创建在表的某列上的,并且存储了这一列的所有值。但是需要理解的重点是数据库索引并不存储这个表中其他列(字段)的值。举例来说,如果我们在 name 列创建索引,那么 age 列和 address 列上的值并不会存储在这个索引当中。数据库索引同时存储了指向表中的相应行的指针。指针是指一块内存区域, 该内存区域记录的是对硬盘上记录的相应行的数据的引用。因此,索引中除了存储列的值,还存储着一个指向在行数据的索引。

 

数据库索引的代价

(1)索引会占用空间。你的表越大,索引占用的空间越大。

(2)在更新操作有性能损失。当你在表中添加、删除或者更新行数据的时候, 在索引中也会有相同的操作。

 

==============

锁表还是锁行

如果查询条件用了索引/主键,那么select ..... for update就会进行行锁。

如果是普通字段(没有索引/主键),那么select ..... for update就会进行锁表。

 

 

 

posted @ 2021-11-26 14:33  KLAPT  阅读(43)  评论(0编辑  收藏  举报