记得给我点个赞点个关注哦,每天都会分享Java有关的文章
更多干货分享等你打开哦 暗号:CSDN
前言:
对于我们这些 MySQL的使用者来说,平时用的最多的就是查询功能。DBA时不时丢过来一些慢查询语句让优化,如果连查询是怎么执行的都不清楚还优化个毛线,所以是时候掌握真正的技术了。 MySQL有一个称为 查询优化器的模块,一条查询语句进行语法解析之后就会被交给查询优化器来进行优化,优化的结果就是生成一个所谓的 执行计划,这个执行计划表明了应该使用哪些索引进行查询,表之间的连接顺序是啥样的,最后会按照执行计划中的步骤调用存储引擎提供的方法来真正的执行查询,并将查询结果返回给用户。不过查询优化这个主题有点儿大,在学会跑之前还得先学会走,所以本章先来瞅瞅 MySQL怎么执行单表查询(就是 FROM子句后边只有一个表,最简单的那种查询~)。
为了故事的发展,先得有个表:
我们为这个 single_table表建立了1个聚簇索引和4个二级索引,分别是:
为 id列建立的聚簇索引。
为 key1列建立的 idx_key1二级索引。
为 key2列建立的 idx_key2二级索引,而且该索引是唯一二级索引。
为 key3列建立的 idx_key3二级索引。
为 key_part1、 key_part2、 key_part3列建立的 idx_key_part二级索引,这也是一个联合索引。
然后我们需要为这个表插入10000行记录,除 id列外其余的列都插入随机值就好了,具体的插入语句我就不写了,自己写个程序插入吧(id列是自增主键列,不需要我们手动插入)。
访问方法(access method)的概念
想必各位都用过高德地图来查找到某个地方的路线吧(此处没有为高德地图打广告的意思,他们没给我钱,大家用百度地图也可以啊),如果我们搜西安钟楼到大雁塔之间的路线的话,地图软件会给出n种路线供我们选择,如果我们实在闲的没事儿干并且足够有钱的话,还可以用南辕北辙的方式绕地球一圈到达目的地。也就是说,不论采用哪一种方式,我们最终的目标就是到达大雁塔这个地方。回到 MySQL中来,我们平时所写的那些查询语句本质上只是一种声明式的语法,只是告诉 MySQL我们要获取的数据符合哪些规则,至于 MySQL背地里是怎么把查询