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

梦莱2年前技术文章647

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 改写。改写时需注意,一定要将函数加在驱动表上,如果加到被驱动表上,会因为索引列上加索引导致索引失效,被驱动表会进行全表扫描。


相关文章

某网络环境下访问业务异常问题排查

某网络环境下访问业务异常问题排查

问题现象在办公网络环境下访问业务:http://xxx服务,无法正常跳转至登陆页面,如下:但是在另外一台机房服务器访问业务:http://xxx 是正常的,会自动跳转到登陆页面,如下:排查步骤1、查找...

证书不识别问题处理

证书不识别问题处理

生成证书时客户端进入显示不识别在172.16.121.210生成一个证书后,使用keytool -importkeystore命令将其他节点172.16.121.114的条目进行合并,问题并没有解决,...

CDH配置HTTPS访问

CDH配置HTTPS访问

申请一台新的机器部署nginx,生成https/ssl证书的机器没有要求1.生成https/ssl证书[root@cdp01 ~]# mkdir -p /data/cert [root@cdp01 ...

企业级大数据安全架构(十一)

企业级大数据安全架构(十一)

一、Kerberos接入dophinscheduler建议将dophinscheduler集成到Ambari安装部署,在Ambari上面开启kerberos1.安装准备编译从GitHub获取dolph...

flume开启jmx加入grafana

部署flume_exporter需要go环境编译配置go环境首先下载go安装包Linux:https://golang.google.cn/dl/解压、添加环境变量tar -zxvf go*.tar....

impala集成ranger后无法刷新元数据

impala集成ranger后无法刷新元数据

【详细描述】impala集成ranger后无法执行invalidate metadata,报错显示没有对应权限【分析过程】daishuyun用户目前在ranger中的权限配置为:报错显示用户daish...

发表评论    

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