👨🎓作者:Java学术趴 🏦仓库:Github、Gitee ✏️博客:CSDN、掘金、InfoQ、云+社区 💌公众号:Java学术趴 🚫特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系小编授权。 🙏版权声明:文章里的部分文字或者图片来自于互联网以及百度百科,如有侵权请尽快联系小编。
☠️每日毒鸡汤:一件事你犹豫去不去做,那就是该立即动身做的。
不加\G横向显示
加\G纵向展示
id: select查询的序列号(是一组数字),表示查询中执行select子句或操作的顺序。分为三种情况
select_type : 查询的类型。主要用于区别普通查询、联合查询、子查询等的复杂查询。
table: 查询当前这一行数据是关于哪个表的。
type: 显示查询使用的是何种类型。
从最好到最差一次是:system>const>eq_ref>ref>range>index>ALL
一般来说,得保证查询至少达到range级别,最好能达到ref级别。
我们真正使用的是key中存在的索引。
额外属性
这里创建的是一个聚合索引(col1,col2,col3),第二个SQL没有提示使用文件内部排序是因为使用列按照了索引的顺序(col1->col2->col3),但是第一个SQL没有使用到col2,产生了一个断层,此时就需要MySQL内部自己进行一次文件排序。在使用 OEDER BY 排序的时候一定要符合聚合索引的顺序。
这里创建的是一个聚合索引(col1,col2),第二个SQL在 GROUP BY 的时候没有按照聚合索引的顺序,导致排序和分组都会提示相应的错误,一定要按照索引的顺序进行分组和排序。
覆盖索引(Covering Index) : 就是 select 的查询的列从索引中就可以获取到,而不必去读取表中的原始数据,MySQL可以利用索引返回 select 列表中的字段,而不必根据索引再次读取数据文件,换句话说: 查询列要被索引覆盖。
// t1表中存在 index_col1_col2 聚合索引
select col1,clo2 from t1;
// 我们只查询 col1和col2,并且这两个字段的数据都可以从索引中获取,此时叫做索引覆盖
select col1 from t1;
// 查部分字段也是可以的
复制代码
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。