MySQL隐式类型转换导致索引失效
发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,今天发现一个问题,where条件的列上明明有索引,但是执行计划还是走全表扫描mysql> explain select task_id FROM mostop_xiaodai_collection_
千家信息网最后更新 2025年02月02日MySQL隐式类型转换导致索引失效
今天发现一个问题,where条件的列上明明有索引,但是执行计划还是走全表扫描
mysql> explain select task_id FROM mostop_xiaodai_collection_call_auto WHERE task_id = 433423882127424 AND task_data_id = 27739131157286912;+----+-------------+-------------------------------------+------------+------+------------------------------+------+---------+------+---------+----------+-------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-------------------------------------+------------+------+------------------------------+------+---------+------+---------+----------+-------------+| 1 | SIMPLE | mostop_xiaodai_collection_call_auto | NULL | ALL | IDX_task_id,IDX_task_data_id | NULL | NULL | NULL | 3101134 | 1.00 | Using where |+----+-------------+-------------------------------------+------------+------+------------------------------+------+---------+------+---------+----------+-------------+1 row in set, 5 warnings (0.00 sec)
查看表结构
mysql> show create table mostop_xiaodai_collection_call_auto\G*************************** 1. row *************************** Table: mostop_xiaodai_collection_call_autoCreate Table: CREATE TABLE `mostop_xiaodai_collection_call_auto` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '编号', `agentid` int(10) unsigned NOT NULL COMMENT '渠道 ID', `loan_id` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '借款 ID', `user_id` bigint(20) unsigned NOT NULL COMMENT '借款人 ID', `call_mobile` varchar(20) NOT NULL COMMENT '手机号', `call_name` varchar(20) NOT NULL COMMENT '名称', `call_sex` varchar(20) NOT NULL COMMENT '性别', `call_due_date` date NOT NULL COMMENT '应还日期', `call_overdue_day` int(10) NOT NULL COMMENT '逾期天数(负数为贷前催告的天数)', `call_talking_type` varchar(50) NOT NULL COMMENT '话术 (A:贷前7天的提醒话术 B:贷前3天的话术 C:贷前3天的话术 D:贷前1天的话术 Ps:若话术为空,则使用的是大唐的话术,其余类似due_one之类的均已废弃)', `call_platform_name` varchar(100) NOT NULL COMMENT '平台名称', `third_party_system` tinyint(3) unsigned NOT NULL COMMENT '第三方IVR系统,1 = 百可录(暂停使用),2 = 大唐,3 = 云电帮(暂停使用), 4 = 科大讯飞, 5 = 基立讯,99 = 决策引擎测试', `send_time` datetime DEFAULT NULL COMMENT '发送时间', `send_status` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '发送状态,0 = 未发送,1 = 发送成功,2 = 发送失败', `send_result` tinyint(3) DEFAULT '0' COMMENT 'IVR结果( 0 = 代表无效接听,或者未接听,1 = 有效接听,已通知用户)', `talking_time` int(10) NOT NULL DEFAULT '0' COMMENT '通话时长', `task_id` varchar(32) NOT NULL DEFAULT '0' COMMENT '外呼任务ID (只为科大讯飞服务)', `task_data_id` varchar(32) NOT NULL DEFAULT '0' COMMENT '外呼任务二级ID (只为科大讯飞服务)', `resend_num` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '重发次数', `receive_time` datetime DEFAULT NULL COMMENT '接收时间', `receive_content` text COMMENT '接收内容', `unique_tab` varchar(100) DEFAULT NULL COMMENT '唯一标识', `created_at` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间', `updated_at` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '更新时间', PRIMARY KEY (`id`), KEY `loan_id` (`agentid`,`loan_id`), KEY `send_result` (`call_mobile`,`send_time`), KEY `receive_time` (`receive_time`), KEY `IDX_task_id` (`task_id`), KEY `IDX_task_data_id` (`task_data_id`)) ENGINE=InnoDB AUTO_INCREMENT=5292233 DEFAULT CHARSET=utf8 COMMENT='催收自动通话表'1 row in set (0.00 sec)
查看warnings
因为这两列为字符串类型 ,但是SQL中并没有加引号!!
`task_id` varchar(32) `task_data_id` varchar(32)
加上引号后查看执行计划
mysql> explain select task_id FROM mostop_xiaodai_collection_call_auto WHERE task_id = '433423882127424' AND task_data_id =' 27739131157286912';+----+-------------+-------------------------------------+------------+------+------------------------------+------------------+---------+-------+------+----------+-------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-------------------------------------+------------+------+------------------------------+------------------+---------+-------+------+----------+-------------+| 1 | SIMPLE | mostop_xiaodai_collection_call_auto | NULL | ref | IDX_task_id,IDX_task_data_id | IDX_task_data_id | 98 | const | 1 | 5.00 | Using where |+----+-------------+-------------------------------------+------------+------+------------------------------+------------------+---------+-------+------+----------+-------------+1 row in set, 1 warning (0.00 sec)
时间
讯飞
任务
名称
天数
引号
大唐
服务
类型
索引
有效
成功
代表
借款人
内容
字符
字符串
平台
引擎
性别
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
福建oa管控软件开发平台
nginx 独立服务器部署
今古电脑软件开发有限公司
网络安全工程师好还是软件好
纵横天下网络技术有限公司
北京hp服务器回收报价
云小福软件开发
数据库中记录月份用什么类型
研究生信息安全网络安全方向
深圳横岗软件开发公司
微信软件开发客服
张嘉文数据库管理
联盟手游服务器连接不上
服务器怎么不能从硬盘启动了
战地5 服务器
三星电视怎么设置网络安全
密云软件开发者
网络安全策划书背景
戴尔服务器关机了散热器还在工作
oss对象存储服务器
网络安全岗位面试问题
西门子1200pct服务器
济南定制软件开发企业
数据库表里字段的值相加
景点网络安全事件应急预案
围棋视频软件开发
软件开发答辩题
网络安全审计的意义
汽车业网络安全有新突破
我的世界服务器在哪