美文网首页
数据库索引问题总结

数据库索引问题总结

作者: Hwyoung | 来源:发表于2018-05-26 15:39 被阅读154次

数据库索引本质上是一种数据结构(存储结构+算法),目的是为了加快目标数据检索的速度。


一.数据库索引的优缺

  • 优点:

1.大大加快数据的检索速度
2.创建唯一性索引,可以保证数据库每一行数据的唯一性
3.加速表与表之间的连接
4.在使用分组和排序子句进行数据库检索时,可以显著减少查询分组和排序的维护速度.

  • 缺点:

1.创建索引需要占用物理空间
2.对表中数据进行增删改,索引需要从新计算,消耗性能.

性别字段为什么不适合加索引?从B+树角度分析
重复率高的不适合做索引,区分度越高,扫描的记录数越少.
区分的公式count(distinct col)/count(*)
待补充....

二.索引分类

唯一索引/主键索引/ 聚簇索引/非聚簇索引 组合索引/

  1. 唯一索引:确保数据唯一性
  2. 非唯一索引:这些字段可以重复,不要求唯一.
  3. 主键索引:是唯一索引的特定类型,创建主键时自动创建.
  4. 聚簇索引: 表中记录的物理顺与键值顺序相同,表数据和主键一起存储.
  5. 非聚簇索引: 表数据和索引分两部分存储
聚簇非聚簇区别,和格子使用场景
根本区别: 表记录的 物理顺序 索引的排列顺序 是否一致

聚簇索引:

  • 优点: 查询速度快,主键和索引在一个结构里.
  • 缺点: 对表进行修改速度慢,** 插入新纪录要从排,维持B+树特性二频繁分裂调整,十分低效.
  • 场景:要取出一定范围的数据时;无需插入新值时.

非聚簇索引:

  • 优点:添加纪录不会引起数顺序重排.
  • 场合:频繁更新的列;

6.组合索引(联合索引):基于多个字段而创建的索引

语法:create index i_name on table_name(col1,col2...);
注意:如果查询条件不包含索引首字段,将不会走索引
条件查询会让部分索引失效

三.索引的实现(数据结构)

目前大部分数据库系统及文件系统采用的是B-Tree或B+Tree.而
B+Tree是数据库系统实现索引的首选数据结构(不同引擎对索引的实现不同)

  • MyISAM索引实现(非聚簇索引)

MyISAM不管是主键索引还是辅助索引都用的非聚簇索引,结构一致
索引文件和数据文件是分离的,因为叶子节点data域保存数据地址

检索过程:按照B+Tree搜索算法搜索索引,存在指定Key,取出data域的值,以data地址取对应数据记录.
  • InnoDB索引实现(聚簇索引)

InnoDB索引用的是聚簇索引,表数据是和主键一起存储的,
主键索引的叶结点data域存储完整数据表记录.
辅助索引的叶结点data域存储行的主键值。

主键索引非常高效,但是辅助索引需要检索两边索引(辅助索引首先获得主键,通过主键索引检索记录)
  • 两种索引对比图
  • 结合实例进行比较
id为主键,name为辅助索引,比较如下:

image.png


四.建索引的几大原则

  • 最左前缀原则(< >范围查询尽量放后面)
  • 区分度越高,扫描记录越少(反例:性别)
  • 尽量扩展,不要新建
  • where中经常用到的建立索引
  • like模糊查询中,右模糊(123%)才会用到索引.

相关文章

  • 数据库索引结构总结

    [TOC] 参考 数据库索引数据结构总结 本文摘抄自数据库索引数据结构总结 1. 摘要 数据库索引是数据库中最重要...

  • 数据库索引问题总结

    数据库索引本质上是一种数据结构(存储结构+算法),目的是为了加快目标数据检索的速度。 一.数据库索引的优缺 优点:...

  • 『数据库』索引的工作原理

    数据库索引能够提高数据库的查询效率,那么索引到底是什么。 什么是索引 索引本身这个名字已经能回答这个问题了,索引就...

  • 个人知识盲点1

    数据库事务数据库索引类型数据库索引的特点B树和B+树闭包问题python装饰器问题==和equals的详细区别过拟...

  • 数据库面试问题集锦

    摘要: 本文对面试/笔试过程中经常会被问到的一些关于数据库(MySQL)的问题进行了梳理和总结,包括数据库索引、数...

  • Mysql 规范

    Mysql 规范 数据库命名规范总结 数据库基本设计规范 索引设计规范 数据库字段设计规范 数据库SQL开发规范 ...

  • 二、MySql和B+树

    一、前置问题 什么是索引? 为什么数据库要建索引?不建索引可以吗?索引是不是越多越好? Mysql是通过索引从硬盘...

  • 面试测试开发被问到数据库索引不知道怎么办?这篇文章告诉你

    提出的问题 什么情况下创建索引,什么时候不需要索引? 索引的种类有哪些? 什么是索引 索引就是帮助数据库管理系统高...

  • 聊聊 Elasticsearch 的倒排索引

    为什么需要倒排索引 倒排索引,也是索引。 索引,初衷都是为了快速检索到你要的数据。 每种数据库都有自己要解决的问题...

  • MySQL两表关联的连接表该如何创建索引?

    问题介绍 创建数据库的索引,可以选择单列索引,也可以选择创建组合索引。  遇到如下这种情况,用户表(user)与部...

网友评论

      本文标题:数据库索引问题总结

      本文链接:https://www.haomeiwen.com/subject/evsmjftx.html