注意我这里使用了冗余索引,没有使用重复索引,因为我觉得在小伙伴们使用索引的过程中,创建重复索引的概率应该还是比较小,同一个字段上创建多个一模一样的索引,应该很少有人会犯这种错误。但是,会有一些容易被大家忽略的冗余索引,我们来捋一捋。
例如我创建了一个联合索引 (A,B,C),按照我们之前跟大家讲的最左匹配原则,当我们使用 A、(A、B)或者 (A、B、C)去查询数据的时候,都会用到这个联合索引,所以我们就没有必要再去单独针对 A 字段创建一个索引,或者针对 A、B 字段创建一个联合索引。
结合上篇文章的内容,小伙伴们思考这样一个问题:假设我有一张表,表中包含如下字段(ID、A、B),其中 ID 是主键,现在我针对 A 字段建立一个索引,如果我有如下查询 SQL:
由于在 A 这个二级索引中就包含了 ID 字段,所以上面这个查询是可以使用到索引排序的。此时,如果由于其他需求,我们将 A 这个索引扩展成联合索引(A、B)了,那么很明显,再执行上面的查询的时候就用不了索引排序了,只能 filesort 了。这样的问题小伙伴们在创建或者修改索引的时候很容易忽略,所以一定要仔细。
这个预估的扫描行数非常重要,这是 MySQL 优化器在执行 SQL 的时候一个重要的参考指标,如果表没有这个统计信息,或者统计信息不准确,那么就有可能导致优化器做出错误的决定。
这些行为都会触发统计信息的自动更新,如果表中数据量比较大,担心以上行为降低表的性能,那么也可以修改 innodb_stats_on_metadata 参数来关闭以上行为。
InnoDB 中的索引是一个 B+Tree,这个我们在之前的文章中就和小伙伴们聊过了。B+Tree 通过一个多路平衡查找树将数据组织在一起,然而这个树中的各个结点在存储的时候在物理分布上却并不一定连续,如果是连续的,则在数据操作的时候就会快很多,如果不需连续,数据操作性能必然会有下降,一般来说,存在这样几种不同的碎片形式:
engine=xxx 命令来实现数据的重整(命令中的 xxx 就是表原本的引擎)。
当然,optimize table 命令在执行的过程中还有一些细节问题,这个松哥后面再整文章和小伙伴们分享。
mysql数据库数据库性能优化
本作品系原创, 采用《署名-非商业性使用-禁止演绎 4.0 国际》许可协议
《Spring Boot+Vue全栈开发实战》作者
关注作者
Spring Boot 启动注解分析
@[toc]虽然我们在日常开发中,Spring Boot 使用非常多,算是目前 Java 开发领域一个标配了,但是小伙伴们仔细想想自己的面试经历,和 Spring Boot 相关的面试题都有哪些?个人感觉应该是比较少的,Spring Boot 本...
江南一点雨
终于卷完了!Redis 打怪升级进阶成神之路(2023 最新版)!
是一种非关系型数据库服务,它能解决常规数据库的并发能力,比如传统的数据库的IO与性能的瓶颈,同样它是关系型数据库的一个补充,有着比较好的高效率与高性能。专注于key-value查询的redis、memcached、ttserver。
民工哥 赞 11 阅读 810
硬卷完了!MongoDB 打怪升级进阶成神之路( 2023 最新版 )!
前面我们学习:MySQL 打怪升级进阶成神之路、Redis 打怪升级进阶成神之路,然后我们还在继续 NoSQL 的卷王之路。从第一篇文章开始,我们逐步详细介绍了 MogoDB 基础概念、安装和最基本的CURD操作、索引和聚合、工...
民工哥 赞 6 阅读 450
初学后端,如何做好表结构设计?
这篇文章介绍了设计数据库表结构应该考虑的4个方面,还有优雅设计的6个原则,举了一个例子分享了我的设计思路,为了提高性能我们也要从多方面考虑缓存问题。
王中阳Go 赞 4 阅读 1.7k 评论 2
又一款内存数据库横空出世,比 Redis 更强,性能直接飙升一倍!杀疯了
KeyDB是Redis的高性能分支,专注于多线程,内存效率和高吞吐量。除了多线程之外,KeyDB还具有仅在Redis Enterprise中可用的功能,例如Active Replication,FLASH存储支持以及一些根本不可用的功能,例如直接备份...
民工哥 赞 4 阅读 1.7k 评论 2
面试官:请说一下如何优化结构体的性能?
使用内存对齐机制优化结构体性能,妙啊!前言之前分享过2篇结构体文章:10秒改struct性能直接提升15%,产品姐姐都夸我好棒 和 Go语言空结构体这3种妙用,你知道吗? 得到了大家的好评。这篇继续分享进阶内容:结...
王中阳Go 赞 4 阅读 3.8k 评论 2
Vue+Express+Mysql全栈项目之增删改查、分页排序导出表格功能
本文记录一下实现一个全栈项目,前端使用vue框架、后端使用express框架、数据库使用mysql。此项目的意义不仅仅有助于我们复习nodejs相关知识、更有助于带前端新人,使其快速从整体全局角度中,理解常规后台管理系...
水冗水孚 赞 4 阅读 2.6k
《Spring Boot+Vue全栈开发实战》作者
关注作者
▲
{"props":{"pageProps":{"initialState":"{"global":{"sessionUser":null,"isHiddenHeader":false,"isHiddenFooter":false,"title":"mysql - 分享几个索引创建的小 Tips - 个人文章 - SegmentFault 思否","titleAlias":"分享几个索引创建的小 Tips - SegmentFault 思否","isShowLogin":false,"beginnerGuideState":{"visible":false,"type":1},"isShowBindMobile":false,"authChannel":"","unactivated":false,"isShowRegister":false,"headOptions":{"keywords":"mysql,数据库,数据库性能优化","description":"@[toc]关于 MySQL 中的索引,松哥前面已经和小伙伴们聊了不少了,不过在索引使用的时候,还是有一些需要注意的细节,如果忽略了这些细节,可能会让索引的使用..."},"notices":[],"sessionInfo":{"key":"4490d6eaa3fee8a579555a99cddaa903","login":false,"id":null},"singleNotice":"","currentRoute":{},"letterNum":0,"noticeNum":0,"serverData":{"Token":"","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36","platform":""},"userStat":{},"newTask":{},"followedTags":[],"globalCss":"","baiduOxAppState":{"isShow":false,"copyUrl":""},"pageUsers":{},"wxShareCover":"","isBaiduOxApp":false,"showProductAuthModal":{"isShow":false,"title":""},"routeInterceptor":{"path":""},"safeCheckModal":{"isShow":false,"pageSource":""},"followSFState":{"isShow":false},"messageNotice":{"event":{"general":0,"ranked":0,"followed":0,"inbox":0,"comment":0,"marketing":0},"message":0,"badge":0},"badgeModalState":{}},"articleDetail":{"artDetail":{"1190000043858561":{"title":"mysql - 分享几个索引创建的小 Tips - 个人文章","keywords":"mysql,数据库,数据库性能优化","description":"@[toc]关于 MySQL 中的索引,松哥前面已经和小伙伴们聊了不少了,不过在索引使用的时候,还是有一些需要注意的细节,如果忽略了这些细节,可能会让索引的使用...","article":{"id":1190000043858561,"title":"分享几个索引创建的小 Tips","cover":"/img/bVc2F3x?spec=cover","tags_list":"1040000000089439,1040000000089846,1040000000149091","user_id":1030000011080899,"blog_id":0,"excerpt":"@[toc]关于 MySQL 中的索引,松哥前面已经和小伙伴们聊了不少了,不过在索引使用的时候,还是有一些需要注意的细节,如果忽略了这些细节,可能会让索引的使用...","parsed_text":"","is_bookmarked":false,"is_liked":false,"created":1685688633,"modified":1685688633,"real_views":124,"real_unique_views":121,"votes":0,"bookmarks":0,"status":0,"origin_url":"","article_type":1,"license":"1","langs":[],"comments":0,"is_edited":false,"ip_address":"广东","tags":[{"id":1040000000089439,"url":"/t/mysql","name":"mysql","icon_url":"https://avatar-static.segmentfault.com/949/844/9498447-54cb56e325a72_small"},{"id":1040000000089846,"url":"/t/%E6%95%B0%E6%8D%AE%E5%BA%93","name":"数据库","icon_url":""},{"id":1040000000149091,"url":"/t/%E6%95%B0%E6%8D%AE%E5%BA%93%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96","name":"数据库性能优化","icon_url":""}],"user":{"id":1030000011080899,"name":"江南一点雨","avatar_url":"https://avatar-static.segmentfault.com/242/490/2424909147-5a538d892590e_huge128","url":"/u/lenve","rank":8364,"rank_word":"8.4k","is_followed":false,"excerpt":"u003cpu003e《Spring Boot+Vue全栈开发实战》作者u003c/pu003e","followers":7216,"articles":454,"user_auth":null,"headdress_worn":null,"summary_badges":{"gold":1,"silver":2,"bronze":10}},"status_key":"available"},"blog":null,"actions":[],"member_actions":[],"article_types":{"1":"原创","2":"转载","3":"翻译"},"pay_info":null,"extra":{"reason":null,"operator":null,"operator_time":null},"tag":{"name":"mysql","url":"/t/mysql","icon_url":"https://avatar-static.segmentfault.com/949/844/9498447-54cb56e325a72_small"},"site":null,"isServerLoaded":true}},"alertMsg":{"showAlert":false,"msg":""},"articleRelated":[],"quotedData":{"rows":[],"page":1,"size":5,"total_page":0,"total":0},"articleRecommendationList":[{"id":1190000043859515,"url":"/a/1190000043859515","cover":"/img/bVc0qQE?spec=cover","title":"Spring Boot 启动注解分析","views":0,"real_unique_views":146,"comments":0,"votes":0,"excerpt":"@[toc]虽然我们在日常开发中,Spring Boot 使用非常多,算是目前 Java 开发领域一个标配了,但是小伙伴们仔细想想自己的面试经历,和 Spring Boot 相关的面试题都有哪些?个人感觉应该是比较少的,Spring Boot 本...","user":{"name":"江南一点雨","url":"/u/lenve","avatar_url":"https://avatar-static.segmentfault.com/242/490/2424909147-5a538d892590e_big64","headdress_worn":null}},{"id":1190000043831440,"url":"/a/1190000043831440","cover":"/img/bVc74IO?spec=cover","title":"终于卷完了!Redis 打怪升级进阶成神之路(2023 最新版)!","views":810,"real_unique_views":945,"comments":0,"votes":11,"excerpt":"是一种非关系型数据库服务,它能解决常规数据库的并发能力,比如传统的数据库的IO与性能的瓶颈,同样它是关系型数据库的一个补充,有着比较好的高效率与高性能。专注于key-value查询的redis、memcached、ttserver。","user":{"name":"民工哥","url":"/u/jishuroad","avatar_url":"https://avatar-static.segmentfault.com/311/143/3111436489-5e9b140a51f93_big64","headdress_worn":null}},{"id":1190000043831522,"url":"/a/1190000043831522","cover":"/img/bVc74Kb?spec=cover","title":"硬卷完了!MongoDB 打怪升级进阶成神之路( 2023 最新版 )!","views":450,"real_unique_views":541,"comments":0,"votes":6,"excerpt":"前面我们学习:MySQL 打怪升级进阶成神之路、Redis 打怪升级进阶成神之路,然后我们还在继续 NoSQL 的卷王之路。从第一篇文章开始,我们逐步详细介绍了 MogoDB 基础概念、安装和最基本的CURD操作、索引和聚合、工...","user":{"name":"民工哥","url":"/u/jishuroad","avatar_url":"https://avatar-static.segmentfault.com/311/143/3111436489-5e9b140a51f93_big64","headdress_worn":null}},{"id":1190000043565073,"url":"/a/1190000043565073","cover":"/img/bVc6XqA?spec=cover","title":"初学后端,如何做好表结构设计?","views":1712,"real_unique_views":1694,"comments":2,"votes":4,"excerpt":"这篇文章介绍了设计数据库表结构应该考虑的4个方面,还有优雅设计的6个原则,举了一个例子分享了我的设计思路,为了提高性能我们也要从多方面考虑缓存问题。","user":{"name":"王中阳Go","url":"/u/wangzhongyang_go","avatar_url":"https://avatar-static.segmentfault.com/102/126/1021266098-6369bf22a4ccf_big64","headdress_worn":null}},{"id":1190000043522803,"url":"/a/1190000043522803","cover":"/img/bVcWhpU?spec=cover","title":"又一款内存数据库横空出世,比 Redis 更强,性能直接飙升一倍!杀疯了","views":1650,"real_unique_views":1605,"comments":2,"votes":4,"excerpt":"KeyDB是Redis的高性能分支,专注于多线程,内存效率和高吞吐量。除了多线程之外,KeyDB还具有仅在Redis Enterprise中可用的功能,例如Active Replication,FLASH存储支持以及一些根本不可用的功能,例如直接备份...","user":{"name":"民工哥","url":"/u/jishuroad","avatar_url":"https://avatar-static.segmentfault.com/311/143/3111436489-5e9b140a51f93_big64","headdress_worn":null}},{"id":1190000043507980,"url":"/a/1190000043507980","cover":"/img/bVc6IzL?spec=cover","title":"面试官:请说一下如何优化结构体的性能?","views":3764,"real_unique_views":3796,"comments":2,"votes":4,"excerpt":"使用内存对齐机制优化结构体性能,妙啊!前言之前分享过2篇结构体文章:10秒改struct性能直接提升15%,产品姐姐都夸我好棒 和 Go语言空结构体这3种妙用,你知道吗? 得到了大家的好评。这篇继续分享进阶内容:结...","user":{"name":"王中阳Go","url":"/u/wangzhongyang_go","avatar_url":"https://avatar-static.segmentfault.com/102/126/1021266098-6369bf22a4ccf_big64","headdress_worn":null}},{"id":1190000040672270,"url":"/a/1190000040672270","cover":null,"title":"Vue+Express+Mysql全栈项目之增删改查、分页排序导出表格功能","views":2581,"real_unique_views":2365,"comments":0,"votes":4,"excerpt":"本文记录一下实现一个全栈项目,前端使用vue框架、后端使用express框架、数据库使用mysql。此项目的意义不仅仅有助于我们复习nodejs相关知识、更有助于带前端新人,使其快速从整体全局角度中,理解常规后台管理系...","user":{"name":"水冗水孚","url":"/u/shuirongshui","avatar_url":"https://avatar-static.segmentfault.com/364/925/3649250322-6000f05816519_big64","headdress_worn":null}}]},"action":{"1190000043858561":{"votes":0,"isLiked":false,"bookmarks":0,"isBookmarked":false}}}"},"__N_SSP":true},"page":"/ArticleDetail","query":{"aid":"1190000043858561"},"buildId":"cCfiKHosfdNMzeIqN6yQh","assetPrefix":"https://static.segmentfault.com/main_site_next/5224777b","runtimeConfig":{"publicPath":"https://static.segmentfault.com/main_site_next/5224777b/","appVersion":"23.06.02"},"isFallback":false,"gssp":true,"scriptLoader":[]}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。