如何创建一个好的索引

技术如何创建一个好的索引 如何创建一个好的索引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)

相关推荐

  • Qt 实现涂鸦板一:简易涂鸦板

    技术Qt 实现涂鸦板一:简易涂鸦板 Qt 实现涂鸦板一:简易涂鸦板新建一个Qt项目,在 .h 文件中写入#pragma once#include QtWidgets/QWidget
    #include “

    礼包 2021年11月5日
  • 怎样浅谈Java Servlets与CGI程序

    技术怎样浅谈Java Servlets与CGI程序怎样浅谈Java Servlets与CGI程序,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。从网络的早期阶

    攻略 2021年11月20日
  • c语言中如何判断字符串常量(c语言中什么是正确的字符串常量)

    技术怎么解析C语言的常量和字符串怎么解析C语言的常量和字符串,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。常量种类C语言中,我们常使用的常量

    攻略 2021年12月13日
  • 将怎么组词,将组词,用将字怎么组词

    技术将怎么组词,将组词,用将字怎么组词将字怎么组词 即将将怎么组词、裨将、小将、将指、宿将、将就、武将、上将、健将、将近、激将、 将胸比肚、 备位将相、 出将入相、 将勇兵雄、 将伯之助、 日就月将、 将(jiāng)

    生活 2021年10月29日
  • 人用C#开发ActiveX控件并使用web调用

    技术人用C#开发ActiveX控件并使用web调用人用C#开发ActiveX控件并使用web调用,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。入职差不多两个

    攻略 2021年10月29日
  • 抖音赞1w20元,教你如何快速用白菜价刷10000个抖音赞!

    技术抖音赞1w20元,教你如何快速用白菜价刷10000个抖音赞!抖音赞1w多少钱,简直就是白菜价在抖音上发布作品,没有人点赞是一件很尴尬的事情,就相当于你的作品已经被抖音抛弃了。想要抖音点赞,可以寻找代刷抖音点赞的网址,

    测评 2021年10月20日