SQL隐式转换导致索引失效_校验规则不一致

梦莱2年前技术文章481

4.校验规则不一致导致索引失效

首先可以通过检查表的校验规则核实是否存在隐式转化。

--查看关联字段的字符集、校验规则
SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, CHARACTER_SET_NAME, COLLATION_NAME
FROM information_schema.COLUMNS
WHERE ...;

核实为校验规则导致的索引失效,其处理手段和字符集导致索引失效基本一致。可以通过修改表结构和修改 SQL 两种情况处理。如果通过修改 SQL 处理,可以通过直接在关联字段后面跟 COLLATE 校验规则 即可,例如:

SELECT lu.user_id, lu.phone, lu.nick_name, lu.head_img, lu.gender
, lu.birthday, lu.status, lu.ctime AS reg_time, luc.ctype, luc.channel_code
, lcc.name AS channel_name, luc.source_id, luw.nickname AS wx_nick_name, luw.unionid
FROM XX lu
LEFT JOIN (
SELECT r.*
FROM XXX r
WHERE r.is_delete != 1
GROUP BY r.phone
) luw
ON lu.phone = luw.phone
LEFT JOIN XXXX luc ON luc.user_id = lu.user_id
LEFT JOIN XXXXX lcc ON lcc.channel_code = luc.channel_code COLLATE utf8_general_ci
WHERE 1 = 1
AND lu.user_id = 8994231
LIMIT 0, 2

三、总结

1.索引失效可能导致 SQL 执行效率大大降低。因此当怀疑出现隐式转换的时候,可以通过 show warnings 核实一下,是否出现相应的提醒。

2.当出现隐式转换,可以先通过使用 cast、convert 函数自行核实一下,是否可以进行相应的优化。

3.有些 SQL 可能存在多种隐式转换,需要核实表结构具体情况,进行相应的 SQL 改写。改写时需注意,一定要将函数加在驱动表上,如果加到被驱动表上,会因为索引列上加索引导致索引失效,被驱动表会进行全表扫描。


相关文章

.gitlab-ci.yml 语法

.gitlab-ci.yml 语法

介绍管道配置从作业(job)开始, 作业是 .gitlab-ci.yml 文件的最基本元素。job是:定义了约束,指出应在什么条件下执行具有任意名称的顶级元素,并且必须至少包含 script 子句不限...

doris-manager部署doris

doris-manager部署doris

1.下载Doris安装包登陆地址https://doris.apache.org/download选择需要下载的版本,这里选择2.0.2 source版本2.部署cluster manager(1)下...

CDH实操--配置Kerberos服务高可用(一)

CDH实操--配置Kerberos服务高可用(一)

前置条件1.主Kerberos已安装并与CDH集成2.备节点安装Kerberos服务yum -y install krb5-server krb5-libs krb5-auth-dialog krb5...

Kafka报 IO Exception(many open files)

Kafka报 IO Exception(many open files)

1 线上问题kafka报错many open files,查看日志如下截取部分错误信息2 问题分析首先看kafka监控平台的一些监控指标,topic列表中关于topic的信息项如下所示:(1)topi...

磁盘存储和文件系统详解

磁盘存储和文件系统详解

1、磁盘结构设备文件:关联至一个设备驱动程序,进而能够与之对应硬件设备进行通信I/O Ports:I/O 设备地址一切皆文件:open(),read(),write(),close()设备类型:块设备...

 大数据集群监控配置操作指导(三)Flink监控开启jmx

大数据集群监控配置操作指导(三)Flink监控开启jmx

官网的关于 flnk+prometheus的文章https://flink.apache.org/features/2019/03/11/prometheus-monitoring.htmlprome...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。