您的位置:首页 > 财经 > 产业 > 沧州网络公司_网店装修视频_软件开发平台_房地产销售怎么找客户

沧州网络公司_网店装修视频_软件开发平台_房地产销售怎么找客户

2024/12/23 12:08:24 来源:https://blog.csdn.net/m0_61160520/article/details/144391807  浏览:    关键词:沧州网络公司_网店装修视频_软件开发平台_房地产销售怎么找客户
沧州网络公司_网店装修视频_软件开发平台_房地产销售怎么找客户

MYSQL索引的分类和创建-CSDN博客文章浏览阅读757次,点赞19次,收藏12次。举例详细讲解了常用的几种索引。https://blog.csdn.net/m0_61160520/article/details/144377618?sharetype=blogdetail&sharerId=144377618&sharerefer=PC&sharesource=m0_61160520&sharefrom=mp_from_link

在目标sql前加上这个关键字就可以了:

image-20220513190241307

执行explain会产生以下11列内容,如下:

列号说明
1idselect查询的序列号,包含一组数字,表示查询中执行select子句或操作表的顺序
2select_type查询类型
3table正在访问哪个表
4partitions匹配的分区
5type/访问的类型
6possible_keys显示可能应用在这张表中的索引,一个或多个,但不一定实际使用到
7key实际使用到的索引,如果为NULL,则没有使用索引
8key_len表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度
9ref显示索引的哪一列被使用了,如果可能的话,是一个常数,哪些列或常量被用于查找索引列上的值
10rows根据表统计信息及索引选用情况,大致估算出找到所需的记录所需读取的行数 filtered //查询的表行占表的百分比
11filtered查询的表行占表的百分比
12Extra包含不适合在其它列中显示但十分重要的额外信息

1、id字段

select查询的序列号,包含一组数字,表示查询中执行select子句或操作表的顺序

(1) id相同

id如果相同,可以认为是一组,执行顺序从上至下,如下查询语句:

explain select * from student s, scores sc where s.id = sc.s_id

image-20220516175632471

(2) id不同

如果是子查询,id的序号会递增,id的值越大优先级越高,越先被执行例子

explain select * from student where age > (select age from student where name = '连宇栋'
);

image-20220516180258900

(3)id部分相同部分不同

id如果相同,可以认为是一组,从上往下顺序执行在所有组中,id值越大,优先级越高,越先执行例子:

explain 
select * from student s, scores sc where s.id = sc.s_id
union
select * from student s, scores sc where s.id = sc.s_id;

image-20220516180459139

2、select_type字段

(1)SIMPLE

简单查询,不包含子查询或Union查询的sql语句。

(2)PRIMARY

查询中若包含任何复杂的子部分,最外层查询则被标记为主查询。

(3) SUBQUERY

在select或where中包含子查询。

(4)UNION

若第二个select出现在uion之后,则被标记为UNION。

(6)UNION RESULT

从UNION表获取结果的合并操作。

3、type字段

最好到最差备注:NULL>system>const>eq_ref>ref>ref_or_null>index_merge>range>index>ALL

(1) NULL

MySQL能够在优化阶段分解查询语句,在执行阶段用不着再访问表或索引,比如通过id没有找到例子:

explain select min(id) from student;

image-20220516180830093

(2)system

表只有一行记录(等于系统表),这是const类型的特列,平时不大会出现,可以忽略,我也没有实测出来。

explain select * from mysql.proxies_priv

我实测一个只有一行记录的系统表,同样是all。

image-20220518115948496

(3) const

表示通过索引一次就找到了,const用于比较primary key或uique索引,因为只匹配一行数据,所以很快,如主键置于where列表中,MySQL就能将该查询转换为一个常量例子:

explain select * from student where id = 1;

image-20220516181115548

(4)eq_ref

唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配,常见于主键或唯一索引扫描例子:

被驱动表使用主键索面,结果唯一

explain select * from scores sc left join student s on s.id = sc.s_id

image-20220516183031354

(5) ref

非唯一性索引扫描,返回匹配某个单独值的所有行,本质上也是一种索引访问,返回所有匹配某个单独值的行,然而可能会找到多个符合条件的行,应该属于查找和扫描的混合体例子:

explain select * from student where name = '白杰'
explain select * from student s left join scores sc on s.id = sc.s_id

image-20220516183118398

(6) ref_or_null

类似ref,但是可以搜索值为NULL的行例子:

explain select * from student s where name = '白杰' or name is null

image-20220516183229589

(7)index_merge

表示使用了索引合并的优化方法例子:

explain select * from student where id = 1 or name ='李兴';

image-20220516181626267

(8)range

只检索给定范围的行,使用一个索引来选择行,key列显示使用了哪个索引一般就是在你的where语句中出现between、<>、in等的查询。例子:

explain select * from student where id between 4 and 7;

image-20220516181716830

(9) index(全索引扫描)

Full index Scan,Index与All区别:index只遍历索引树,通常比All快因为索引文件通常比数据文件小,也就是虽然all和index都是读全表,但index是从索引中读取的,而all是从硬盘读的。例子:

explain select name from student;

image-20220516181813844

(10) ALL(全表扫)

Full Table Scan,将遍历全表以找到匹配行例子:

explain select * from student;

image-20220516181840924

4、table字段

表示数据来自哪张表

5、possible_keys字段

显示可能应用在这张表中的索引,一个或多个查询涉及到的字段若存在索引,则该索引将被列出,但不一定被实际使用

6、key字段

实际使用到的索引,如果为NULL,则没有使用索引查询中若使用了覆盖索引(查询的列刚好是索引),则该索引仅出现在key列表

7、key_len字段

表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度在不损失精确度的情况下,长度越短越好key_len显示的值为索引字段最大的可能长度,并非实际使用长度即key_len是根据定义计算而得,不是通过表内检索出的

8、ref字段

哪些列或常量被用于查找索引列上的值

9、rows字段

根据表统计信息及索引选用情况,大致估算出找到所需的记录所需读取的行数

10、partitions字段

匹配的分区

11、filtered字段

它指返回结果的行占需要读到的行(rows列的值)的百分比

12、Extra字段

该列包含不适合在其它列中显示,但十分重要的额外信息,我们列举几个例子:

(1)Using filesort

只要使用非索引字段排序,就会出现这样的内容。

(2)Using temporary

使用了临时表保存中间结果,MySQL在对结果排序时使用临时表,常见于排序order by 和分组查询group by例子:

(3)Using where

使用了where条件例子:

(4)impossible where

where子句的值总是false,不能用来获取任何数据:

explain select * from student where name = '白洁' and name = '李兴';

image-20220516182510228

(5)Select tables optimized away

SELECT操作已经优化到不能再优化了(MySQL根本没有遍历表或索引就返回数据了)例子:

explain select min(id) from student;

image-20220516182125161

(6)no matching row in const table

explain select * from student where id < 100 and id > 200;

image-20220516182318832

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com