首页 > 数据库 >MySql类型转换函数cast

MySql类型转换函数cast

时间:2022-11-17 11:55:27浏览次数:67  
标签:类型转换 MySql v0 cast 字段 user sql

这两天处理一个现网的MySQL慢查询工单,学到了一个好用的MySQL函数:cast。事情是这样的:
我们有两张表 t_user 和 t_rule 表,需要关联这两张表去查询,关联字段是 t_user 表的主键id,int型,和t_rule表的 v0字段,varchar(32)。
下面是未走索引的sql样例和explain:

可以看到由于没有进行类型转换,该条sql会先查询t_user表,然后再通过t_user表的主键id去连接 t_rule表,但由于关联字段类型不一样,所以没有走索引, 最终查询 t_rule表是 全表扫描。

下面我们看下优化后的sql样例和explain:

优化该sql主要有两点:
(1)加了个联合索引 idx_ptype_v01 (v0,ptype,v1)
(2)使用了cast函数对 t_user 表的id进行了类型转换,转换成了和v0字段一样的varchar类型,才能够走到索引。

总结,以上就是这个cast函数的使用方式之一,当然,解决这个慢sql还有很多方法,比如不连表查询,或者将v0字段改成int型等方法(这个方法慎用,因为对于强类型语言而言,数据库字段从varchar类型改为int型,意味着代码也要改)。

参考链接
cast函数讲解:https://blog.csdn.net/qq_21101587/article/details/78642423
MySQL中隐式转换导致索引失效:https://www.cnblogs.com/guitu18/p/12113495.html

标签:类型转换,MySql,v0,cast,字段,user,sql
From: https://www.cnblogs.com/lmz-blogs/p/16898995.html

相关文章

  • MySQL8 常用命令
    初始化(初始化之后的密码需要记一下,首次登录的时候需要用到)mysqld--initialize--console安装(服务名称可选,默认为MySQL)mysqldinstall服务名称启动服务netstar......
  • mysql-navicat主键递增清零
    在navicat上设置没有用必须使用sql语句清零MySQL自增ID起始值修改方法-52php-博客园(cnblogs.com)mysql自增主键清零方法-木西-Muxy-博客园(cnblogs.com)......
  • 厉害了!不懂自动化运维ansible你就out啦!批量部署web服务及mysql
    理论讲解step1为什么用它?提高效率。ansible可为多台服务器进行管理,自动部署服务,专为Unix系统开发的自由开源的配置和自动化工具。step2温馨提示:优点太多,就不一一介绍完啦......
  • zk,kafka,redis哨兵,mysql容器化
    1.zookeeper,kafka容器化1.1zookeeper+kafka单机docker模式dockerpullbitnami/zookeeper:3.6.3-debian-11-r46dockerpullbitnami/kafka:3.1.1-debian-11-r36dock......
  • docker-compose 安装多个mysql
    docker-compose.ymlversion:'3'services:mysql-1:restart:alwaysimage:mysql:5.7.28container_name:mysql-1volumes:#数据库......
  • 在MYSQL里,不能先select一个表的记录,再按此条件进行更新和删除同一个表的记录
    解决办法是,将select得到的结果,再通过中间表select一遍,这样就规避了错误,这个问题只出现于mysql,mssql和oracle不会出现此问题。MySQL根据字段删除重复值deletefromsites......
  • mysql8.0.31 mgr搭建
    1. mysql下载地址:MySQL::DownloadMySQLCommunityServer2. mgr文档:MySQL::MySQL8.0ReferenceManual::18GroupReplication3.安装实例:a) 解压ta......
  • MySQL主从原理
    MySQL主从又叫Replication、AB复制。简单讲就是A和B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,两者数据是实时同步的MySQL主从是基于binlog的,主上需开启binlo......
  • mysql的锁机制-MyISAM表锁
    1、MySQL锁的基本介绍锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资......
  • MySQL8.0.26-Linux版安装
    MySQL8.0.26-Linux版安装1.准备一台Linux服务器云服务器或者虚拟机都可以;Linux的版本为CentOS7;2.下载Linux版MySQL安装包https://downloads.mysql.com/archives/......