首页 > 数据库 >mysql性能分析之隐式类型转化

mysql性能分析之隐式类型转化

时间:2023-01-04 17:12:33浏览次数:47  
标签:status 使用 转化 索引 mysql query where 之隐式

之前遇到过一个问题,建表时将字段status的类型设置为varchar,插入数据时,该字段的值只有0和1两种情况,在该字段上建立索引,使用where status=1查询时却并没有走索引。如下所示:

1.表结构及索引

总共有800万条数据

 

2.使用explain查看执行命令的索引使用情况

 

  由上图可以看出,执行select count(*) from vip_test_details where status=1时扫描了700多万条数据,并没有使用索引query_index0。

  使用show warnings查看报警信息提示由于在字段status上存在类型或者排序转换,所以不能使用索引query_index0,也就是说mysql为了方便与where条件中的1进行比较,把全表中的status值都转换成了数字型,导致了全表扫描。

修改一下执行的命令,将where条件中的1修改为字符串,如下所示:

 由上可以看出,该次查询使用了索引query_index0,只过滤了469条数据,之前的查询没有使用索引,是因为where条件的类型不正确,导致mysql进行了 隐式类型转换。

 

标签:status,使用,转化,索引,mysql,query,where,之隐式
From: https://www.cnblogs.com/mianbaoshu/p/17025432.html

相关文章

  • MySQL------单行函数汇总
    基本函数函数用法举例ABS(x)返回x的绝对值ABS(-2)=2;ABS(13)=13SIGN(X)返回X的符号。正数返回1,负数返回-1,0返回0SIGN(-265)=-1;SIGN(123)=1PI()......
  • mysql show processlist的使用
    showfullprocesslist用来查看当前线程处理情况,具体信息请参考官网:https://dev.mysql.com/doc/refman/5.7/en/show-processlist.htmlshowfullprocesslist返回的结果......
  • Mysql错误问题记录
    ①Incorrectstringvalue:'\xE6\x94\xBE\xE5\xA4\xA7...'forcolumn'name'atrow1Query……原因:编码不匹配。数据库是latin1编码,而插入的中文字符串是utf-8编码。......
  • ODBC连接mysql
    配置/etc/odbc.ini执行命令:isqlfreeswitchfreeswitch123456-v第一个报错:[08S01][unixODBC][MySQL][ODBC5.3(w)Driver]Can'tconnecttolocalMySQLserverthrou......
  • 关于新服务器安装Mysql服务后注意事项:1.表名区分大小写 2.日期中不允许出现值为0
    新购入一台Linux服务器,将项目部署至服务器,项目出现问题记录如下:1.项目使用JPA,实例类中表名为大写,JPA查询显示该表不存在,原因是Mysql设置中默认表名区分大小写showvari......
  • MySQL删除有外键关联的表
    MySQL删除有外键关联的表现象:Cannotdeleteorupdateaparentrow:aforeignkeyconstraintfails原因:在删除表时,删除的表与另外一张表存在外键关联解决:方案一......
  • MySQL 删除时 Data truncation Truncated incorrect DOUBLE value
    MySQL删除时Datatruncation:TruncatedincorrectDOUBLEvalue数据库在删除的时候会做数据类型校验,将字段值转换为你传进去的类型,发现不能转换的就会报错......
  • Mysql5.7的初始密码更改
    软件版本的变化真是让人兴奋……Linux服务器决定安装使用mysql5.7了。愉快的去官网下载安装包:https://dev.mysql.com/downloads/mysql/解决完所有依赖安装……执行sys......
  • Linux下rpm安装MySQL及配置
    Linux下rpm安装MySQL及配置xupeng1644已于2022-03-2211:38:47修改2747收藏15分类专栏:Linux文章标签:rpmMySQLLinux版权Linux专栏收录该内容55篇文章1订阅订......
  • mysql 中的auto_increment自增值
    1.初始化自增值默认值是从1开始,在建表时使用“AUTO_INCREMENT=n”可以来指定一个自增的初始值,比如:CREATETABLEtest(idINTUNSIGNEDNOTNULLPRIMARYKEYAUTO_INCR......