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

梦莱2年前技术文章656

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


相关文章

查看相关服务器信息命令

查看相关服务器信息命令

1、查看服务器架构方式arch2、查看服务器cpu核数nproc3、查看服务器内存大小free -hdmidecode -t 17 | grep Size4、查看某目录下挂载磁盘大小lsblk5、查看...

Hive压测之开源Hive基准测试工具(hive-testbench-hive14)

Hive压测之开源Hive基准测试工具(hive-testbench-hive14)

此文章禁止转载概述Hive基准测试工具工具,可用来造数测试Hive基本性能。TPC-DS:提供一个公平和诚实的业务和数据模型,99个案例TPC-H:面向商品零售业的决策支持系统测试基准,定义了8张表,...

rds pg10 ssd云盘升级磁盘类型方案

rds pg10 ssd云盘升级磁盘类型方案

1、升级方案一原实例变更配置方案优缺点:优点:操作方便,升级后能保证数据和存储过程都是正常的。缺点:停机时间较长,整个变更配置期间业务不可用。变更步骤参考:在配置信息区域单击变更配置。(仅包年包月实例...

Spark调优方式

(1)资源参数调优num-executors:设置Spark作业总共要用多少个Executor进程来执行executor-memory:设置每个Executor进程的内存executor-cores:...

Redis 运维规范_命令使用规范

Redis 运维规范_命令使用规范

二、命令使用规范1、keys * keys * 命令原理是扫描整个 Redis 里面所有 key,该命令执行期间其他发送向 Redis 服务端的命令,都会被阻塞。scan 命令是一个基于游标的迭代器,...

oracle手工完全恢复

一)基本概念1)完全恢复的步骤1)restore: OS拷贝命令还原所有或部分datafile2)recover:SQL*PLUS利用归档日志和当前的redo日志做恢复2)完全恢复可以基于三个级别re...

发表评论    

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