首页 > 数据库 >数据库索引和索引优化

数据库索引和索引优化

时间:2024-01-18 16:49:06浏览次数:34  
标签:优化 数据库 节点 叶子 索引 数据 主键 1000

索引和索引优化
MysqlInnoDB使用B+树作为索引,如下图,是一个简化的B+数:

使用B+树作为索引有点非常明显的优点
1、B+树的数据都保存在叶子节点中,非叶子节点只保存指针,这样可以极大的减少数的阶数。如图如果每一阶可以存储1000个值,那么3阶树即可以存储1000*1000*1000=10亿个数据。而根节点一般是常驻内存的,所以查找10亿数据,2次磁盘IO即可完成。

2、B+数的所有叶子节点之间按顺序建立了链指针,也就是所有数据一定是按顺序存储的,并且每个叶子到根的距离相同,非常适合范围查找.

 

索引的几个概念
1、聚簇索引: 以主键创建的索引,叶子节点的数据是整行的全部数据,叶子节点也叫数据页。
2、普通索引:以非主键创建的索引,叶子节点数据是主键的值。
3、回表查询:从普通索引查找到主键值以后,再从聚簇索引根据该主键值查找相关数据的行为称为回表。
4、索引覆盖:普通索引可以有多列,如果要查询的数据全部在索引列中,则不会产生回表,称为索引覆盖.

 

 

优化建议
1、【重要】在表中建立索引: 建立索引时,优先考虑where和order by使用到的字段。业务上唯一的字段,即使是组合字段也要建唯一索引。
2、使用自增ID作为主键: 自增ID的是连续的,主键是聚簇索引,会连续的在磁盘中写入数据,减少了并不是业务逻辑的主键,业务逻辑不分页和移动数据的操作,IO速度最快。注意这是逻辑存储的主键推荐使用自增列作为主键,更不推荐与逻辑主键公用一个自增ID
3、索引不会包含有 null 值的列: 避免表字段运行为nul,只要列中包含有 nul 值都将不会被包含在索引中,复合索引中只要有一列含有 null 值,那么这一列对于此复合索引就是无效的。所以我们在数据库设计时建议不要让字段的默认值为 null。
4、【重要】使用短索引: 如果有一个 varchar (255) 的列,如果在前 10 个或 20 个字符内,多数值是惟一的,那么就不要对整个列进行索引。
5、使用复合索引: 查询只使用一个索引,因此如果 where 子句中已经使用了索引的话,那么 order by 中的列是不会使用索引的。

标签:优化,数据库,节点,叶子,索引,数据,主键,1000
From: https://www.cnblogs.com/mq0036/p/17972810

相关文章

  • 阿里云 PolarDB 开发者大会首度召开,让数据库开发像“搭积木”一样简单
    1月17日,首届阿里云PolarDB开发者大会在京举办,中国首款自研云原生数据库PolarDB发布“三层分离”全新版本,基于智能决策实现查询性能10倍提升、节省50%成本。面向开发者,阿里云全新推出数据库场景体验馆、训练营等系列新举措,广大开发者可率先免费体验PolarDB数据库核心特......
  • 19条MySQL优化
    一善用EXPLAIN 做MySQL优化,我们要善用 EXPLAIN 查看SQL执行计划。下面来个简单的示例,标注(1,2,3,4,5)我们要重点关注的数据•type列: 连接类型。一个好的sql语句至少要达到range级别。杜绝出现all级别•key列: 使用到的索引名。如果没有选择索引,值是NULL。可以采取强制......
  • springboot配置分页插件pageHelper和数据库方言的几种方式
    方式一:启动类配置分页插件(Application.java)1/**2*pageHelper分页插件3*/4@Bean5publicPageHelperByMyselfpageHelper(){6PageHelperByMyselfpageHelper=newPageHelperByMyself();7Propertiesproperties=newPr......
  • xapian 搜索引擎介绍与使用入门
    Xapian是一个开源搜索引擎库,使用C++编写,并提供绑定(bindings )以允许从多种编程语言使用。它是一个高度适应性的工具包,允许开发人员轻松地将高级索引和搜索功能添加到自己的应用程序中。Xapian支持多种加权模型和丰富的布尔查询运算符。最新稳定版本是1.4.24,发布于2023年......
  • mysql和redis库存扣减和优化
    前言大流量情况下的库存是老生常谈的问题了,在这里我整理一下mysql和redis应对扣除库存的方案,采用jmeter进行压测。JMETER设置库存初始值50,线程数量1000个,1秒以内启动全部,一个线程循环2次,共2000个请求MySQL方案初始方案<updateid="decreaseStock">UPDATEstock......
  • 2024年1月中国数据库排行榜: OPOT 组合续写贺新年,达梦、腾讯发力迎升势
    2024年开局,墨天轮中国数据库流行度排行火热出炉,292个国产数据库齐聚榜单。整体来看,榜单前十整体变化不大,“O-P-O”格局稳固,前五位名次未发生变动。但新年伊始,各家数据库热度上升迅猛,分数差距也逐渐缩小,这微妙的波动折射出激烈的竞争态势,行业内涌动充分活力。本月排行榜解读文章......
  • 泛互联网行业A/B测试全解析:产品优化的创新之道
    更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群近期,火山引擎数智平台举办了“超话数据:企业产品优化分享”的活动。火山引擎产品解决方案专家从企业应用的视角,分享了A/B实验在产品全用户生命周期的体验优化和案例。在用户拉新环节,企业可以......
  • 前端长列表优化
    一、场景引入长列表网页相信大多数开发者都遇到过,在DOM元素过多的情况下,浏览器渲染会很慢,非常影响用户体验。因此我们会经常采用虚拟滚动、分页、上拉加载更多等不同的方式来进行优化,这些方式的思想都是一样的,都是只渲染可见区域,等用户需要时再加载更多的内容。二、解决方案1.c......
  • 数据库中avg函数求平均值空值参与统计吗?
    先说结论:avg函数求平均值时,空值不参与统计。示例数据:withtmpas(select1asid,100asvalueunionallselect2asid,nullasvalueunionallselect3asid,200asvalue)selectavg(value),sum(value),count(value),count(1)fromtmp执行结果:`avg(va......
  • 流数据库-RisingWave
    参考:https://docs.risingwave.com/docs/current/architecture/https://www.risingwavetutorial.com/docs/intro概况使用场景:技术架构......