如何创建一个好的索引

技术如何创建一个好的索引 如何创建一个好的索引1、过滤效率高的放前面
对于一个多列索引,它的存储顺序是先按第一列进行比较,然后是第二列,第三列...这样。查询时,如果第一列能够排除的越多,那么后面列需要

如何创建一个好的索引

1、过滤效率高的放前面

对于一个多列索引,它的存储顺序是先按第一列进行比较,然后是第二列,第三列...这样。查询时,如果第一列能够排除的越多,那么后面列需要判断的行数就越少,效率越高。

关于如何判断哪个列的过滤效率更高,可以通过选择性计算来决定。

2、使用频率高的放前面

其实该建议比第一条优先级更高:

例如一个商品管理页面,一般都是基于该店家的上架或已下架的商品,再添加其他的查询条件等等。由于所有的查询都需要带有shopid和status条件,此时应该优先将这两个条件作为基本前缀,这样就可以方便复用索引。

例如一个(shopid, status, createdat)的索引,当查询条件只有shopid和status时,也可以使用该索引。如果完全根据字段的过滤效率来决定索引,就需要创建很多不同的索引。

3、减少随机IO

在之前对硬盘知识了解后可以知道,一次随机读会有10ms的寻址延迟,如果一次查询涉及达到多次的随机读,会很大程度的限制查询性能。常见的sql查询造成随机IO的包括回表和join

4、避免重复索引

以减少随机IO中的查询为例,我们最终是把(author, createdat)扩展为(author, createdat,name),而不是创建一个新的(author, name)的索引。

在实际应用场景中也有类似的情况,例如创建一个userid的外键索引,然后又创建(userid, xxx)的索引。由于索引存储的顺序性,其实可以将这两个索引进行合并,如果我们先创建(userid, xxx)的索引,然后再添加userid的外键,mysql会自动使用前面创建索引。

索引是否越多越好呢

显然不是,因为索引是对原表的数据冗余,那么他就必须要保证数据的一致性。如果原表增加了一条数据,索引也需要增加。如果原表修改了一条数据,那么对应的索引可能也要修改内容以及排序的位置,这可能会造成页分裂或页合并。一个表如果索引过多,那么维护索引与表的数据一致性也是不小的压力。通常建议在满足需求前提下,索引越少越好。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/143793.html

(0)

相关推荐

  • asp.net core 中Service层的实现样板是怎样的

    技术asp.net core 中Service层的实现样板是怎样的这期内容当中小编将会给大家带来有关asp.net core 中Service层的实现样板是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文

    攻略 2021年11月15日
  • Redis复习

    技术Redis复习 Redis复习Redis
    Redis基础知识
    redis默认有16个数据库
    默认使用的是第0个
    基本方法
    可以使用select进行切换数据库
    127.0.0.1:6379 selec

    礼包 2021年10月26日
  • 学而时习之不亦说乎有朋自远方来,学而时习之不亦乐乎读音

    技术学而时习之不亦说乎有朋自远方来,学而时习之不亦乐乎读音“学而时习之学而时习之不亦说乎有朋自远方来,不亦说乎”的读音是什么?学而时习之,不亦说乎的读音:xué ér shí xí zhī,bú yì yuè hū。

    生活 2021年10月20日
  • 被动语态的结构,被动语态的结构是什么呢

    技术被动语态的结构,被动语态的结构是什么呢1被动语态的结构、动词一般现在时被动语态
    am/is/are+过去分词
    English is widely used at international meetings.英语在许

    生活 2021年10月28日
  • C#操作Excel实现的实例分析

    技术C#操作Excel实现的实例分析C#操作Excel实现的实例分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。C#操作Excel是怎么样执行的呢?我们在

    攻略 2021年11月24日
  • 创建javascript对象类成员(javascript私有成员分析)

    技术JavaScript 中怎样创建私有成员JavaScript 中怎样创建私有成员,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。前言:面向对象编程语言中的

    攻略 2021年12月13日