前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据库索引

数据库索引

作者头像
宇宙之一粟
发布2022-05-13 14:42:03
2620
发布2022-05-13 14:42:03
举报
文章被收录于专栏:宇宙之_一粟宇宙之_一粟

1. 为什么要使用使用索引?

最简单的方式--全表扫描,普遍认为很慢。索引类似于字典,通过索引快速查询数据。

2. 什么样的信息能成为索引?

代码语言:javascript
复制
主键、唯一键以及普通键等。

3. 索引的数据结构?

  • 生成索引,建立二叉查找树进行二分查找
  • 生成索引,建立B树结构进行查找
  • 生成索引,建立B+树结构进行查找
  • 生成索引,建立Hash结构进行查找

优化你的索引结构

二叉查找树上阵

二分查找 O(logn)

缺点是退化成链表:O(n)

B 树

从图中可以看出,节点信息包括:关键字和指向孩子的指针

  • 根节点至少包括两个孩子
  • 树中每个节点最多含有m个孩子(m>=2)
  • 除根节点和叶节点外,其他每个节点至少有ceil(m/2)个孩子
  • 所有叶子节点都位于同一层

设计这样的原因:尽可能少IO操作

B+ 树

B+树更适合用来做存储索引:

  • B+树的磁盘读写代价更低
  • B+树的查询效率更加稳定
  • B +树更有利于对数据库的扫描
  • 适合范围查询

Hash索引也可以考虑一下

  • 遇到大量Hash值相等的情况后性能并不一定就会比B-Tree索引高

BitMap索引是个神器

Oracle使用,锁粒度非常大,不适合高并发系统

4. 密集索引和稀疏索引的区别

  • 密集索引文件中的每个搜索码值都对应一个索引值
  • 稀疏索引文件只为索引码的某些值建立索引项
代码语言:javascript
复制
.frm
.ibd

.frm
.MYI
.MYD

1. 如何定位慢查询?

具体场景具体分析,只提出大致思路:

  • 根据慢日志定位慢查询sql
  • 使用explain等工具分析sql
  • 修改sql或者尽量让sql走索引
代码语言:javascript
复制
SHOW variables like '%quer%';

slow_query_log

slow_query_log_file

long_query_time

代码语言:javascript
复制
SHOW STATUS like '%slow_queries%'; # 查询慢查询次数
SET GLOBAL slow_query_log = on;
SET GLOBAL long_query_time = 1;

SELECT count(id) from person_info_large;

SELECT name from person_info_large order by name desc;

Explain关键字

Explain SELECT name from person_info_large order by name desc;

extra

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-05-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 为什么要使用使用索引?
  • 2. 什么样的信息能成为索引?
  • 3. 索引的数据结构?
  • 优化你的索引结构
  • Hash索引也可以考虑一下
  • BitMap索引是个神器
  • 4. 密集索引和稀疏索引的区别
  • 1. 如何定位慢查询?
    • Explain关键字
      • extra
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档