如何创建一个好的索引

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

相关推荐

  • JDK7与JDK8中HashMap的实现是怎样的

    技术JDK7与JDK8中HashMap的实现是怎样的本篇文章为大家展示了JDK7与JDK8中HashMap的实现是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。JDK7中的

    攻略 2021年11月16日
  • 猪宝宝小名,我想帮宝宝取个好听的小名

    技术猪宝宝小名,我想帮宝宝取个好听的小名姓名,记录着宗族血统的烙印,凝聚着父母对孩子的深情厚义,隐喻着不同的理想追求和目标;姓名,传承了人的情、意、志;姓名,蕴含了人的精、气、神猪宝宝小名。人的姓名不只是一个人体符号,而

    生活 2021年10月30日
  • 抖音请人刷粉,刷抖音粉丝网站最便宜?

    技术抖音请人刷粉,刷抖音粉丝网站最便宜?抖音便宜刷粉网站,刷抖音粉丝网站最便宜抖音刷粉丝的平台网站搜索应该也很多,价格差异也很大,原因主要是看做单的号的质量,有的机器刷单,有的是真人接单,有的是群派单,还有的是真机养的号

    测评 2021年10月19日
  • 2020-2021-1学期20212310《网络空间安全导论》第九周自习总结

    技术2020-2021-1学期20212310《网络空间安全导论》第九周自习总结 2020-2021-1学期20212310《网络空间安全导论》第九周自习总结2.1 密码学概述
    语言系统、数字系统和文字

    礼包 2021年12月5日
  • nodejs中的fs模块中的方法

    技术nodejs中的fs模块中的方法 nodejs中的fs模块中的方法nodejs中的fs模块
    引入模块
    const fs =require("fs")检测文件是否存在fs.stat(path,call

    礼包 2021年12月2日
  • JAVA中使用SQL语句查询 EXCEL文件数据

    技术JAVA中使用SQL语句查询 EXCEL文件数据这篇文章将为大家详细讲解有关JAVA中使用SQL语句查询 EXCEL文件数据,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了

    攻略 2021年12月2日