怎么在Mysql中使用explain分析索引的走向?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

准备工作

1、用户表一张,有uid ,user_name,real_name ,eamil等字段,详细见建表语句
2、在user_name字段下增加一个简单索引user_name,在email,mobile,age三个字段下增加索引complex_index
3、表引擎使用MyISAM,增加
4、准备97000条数据(具体的可以根据实际情况来定数据量,这里准备的是97000+)
5、实验工具Navcat

建表语句

DROPTABLEIFEXISTS`qz_users`;CREATETABLE`qz_users`(`uid`int(11)unsignedNOTNULLAUTO_INCREMENTCOMMENT'用户的UID',`user_name`varchar(255)COLLATEutf8mb4_unicode_ciDEFAULTNULLCOMMENT'用户名',`real_name`varchar(128)CHARACTERSETutf8DEFAULTNULLCOMMENT'用户姓名',`email`varchar(255)CHARACTERSETutf8DEFAULTNULLCOMMENT'EMAIL',`mobile`varchar(16)CHARACTERSETutf8DEFAULTNULLCOMMENT'用户手机',`password`varchar(32)CHARACTERSETutf8DEFAULTNULLCOMMENT'用户密码',`salt`varchar(16)CHARACTERSETutf8DEFAULTNULLCOMMENT'用户附加混淆码',`avatar_file`varchar(128)CHARACTERSETutf8DEFAULTNULLCOMMENT'头像文件',`sex`tinyint(1)DEFAULTNULLCOMMENT'性别',`birthday`int(10)DEFAULTNULLCOMMENT'生日',PRIMARYKEY(`uid`),KEY`user_name`(`user_name`(250)),KEY`complex_index`(`email`,`mobile`,`sex`))ENGINE=MyISAMAUTO_INCREMENT=1DEFAULTCHARSET=utf8mb4COLLATE=utf8mb4_unicode_ci;

准备的查询语句

explainselect*fromqz_userswhereuser_name="ryanhe";explainselect*fromqz_userswhereemail="x";explainselect*fromqz_userswhereemail="x"andmobile="x"andsex=1;explainselect*fromqz_userswhereemail="x"andmobile="x";explainselect*fromqz_userswhereemail="x"andsex="x";explainselect*fromqz_userswheresex="x"andmobile="x";explainselect*fromqz_userswheremobile="x"andsex="0";

结果分析

使用 user_name 条件

explainselect*fromqz_userswhereuser_name="x";

结果

分析

是否走索引索引名称扫描记录数是user_name1

使用 email 条件

explainselect*fromqz_userswhereemail="x";

结果

分析

是否走索引索引名称扫描记录数是complex_index7

使用 email + mobile + sex条件

explainselect*fromqz_userswhereemail="x"andmobile="x"andsex=1;

结果

分析

是否走索引索引名称扫描记录数是complex_index1

使用 email + mobile 条件

explainselect*fromqz_userswhereemail="x"andmobile="x";

结果

分析

是否走索引索引名称扫描记录数是complex_index7

使用 email + sex 条件

explainselect*fromqz_userswhereemail="x"andsex="x";

结果

分析

][3] 是否走索引索引名称扫描记录数是complex_index7

使用 sex + mobile 条件

explainselect*fromqz_userswheresex="x"andmobile="x";

结果

分析

是否走索引索引名称扫描记录数否
97185

使用 mobile+ sex 条件

explainselect*fromqz_userswheremobile="18602199680"andsex="0";

结果

分析

是否走索引索引名称扫描记录数否
97185

看完上述内容,你们掌握怎么在Mysql中使用explain分析索引的走向的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!