mysql 联合表查询从表即使有索引依然ALL的一个原因-索引ALL解决,字符编码方式不一致导致全表搜索
mysql 联合表查询从表即使有索引依然ALL的一个原因-索引ALL解决,字符编码方式不一致导致全表搜索
那就是主表和从表的关联字段的编码方式不一样!!!
产生的现象:

解决之后,正确的使用了t2.order_no ref索引,而不是ALL

检查mysql主体编码方式,是否由于后来新建的表的关联字段和之前的主表的字段的编码方式不一样
改成一样的编码方式以后就ok了
#可以通过以下排查解决:
#查看数据库编码格式
SHOW VARIABLES LIKE 'character_set_database'; #修改
#删除重新指定
CREATE DATABASE testDb CHARACTER SET utf8;
CREATE TABLE testTable(order_no VARCHAR(32) NOT NULL) DEFAULT CHARSET = utf8; # 查看数据表的编码格式
SHOW CREATE TABLE testTable;
SHOW FULL COLUMNS FROM testTable; #直接修改
#1、数据库修改
ALTER DATABASE testDb CHARACTER SET utf8;
#2、数据表修改
ALTER TABLE testTable CHARACTER SET utf8; # UTF8MB3
ALTER TABLE testTable CHARACTER SET utf8mb4; #3、表字段修改
ALTER TABLE testTable CHANGE order_no order_no VARCHAR(32) CHARACTER SET utf8 NOT NULL;
ALTER TABLE testTable CHANGE order_no order_no VARCHAR(32) CHARACTER SET utf8mb4 NOT NULL;
utf8_general_ci
utf8mb4_general_ci
MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。好在utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换。当然,为了节省空间,一般情况下使用utf8也就够了。
SQL语句语法:如果没有正确的使用到索引,需要检查SQL语句是否正确,以下是DEMO:
简单介绍:order仅仅有order_no索引,multiple既有order_no索引,又有create_time索引
#t1仍然是ALL,因为where条件也跟它无关,且order是大表,主要查询业务的数据作为主表,其他的作为从表。
#t1是ALL索引
EXPLAIN
SELECT * FROM `order` t1 use index (order_no)
LEFT JOIN `multiple` t2 on t1.`order_no` =t2.`order_no`
where t1.`create_time` >= '2023-06-01 00:00:00' and t1.`create_time` <= '2023-06-30 23:59:59';

#t1是ALL索引
EXPLAIN
SELECT * FROM `order` t1 force index (order_no)
LEFT JOIN `multiple` t2 on t1.`order_no` =t2.`order_no`
where t1.`create_time` >= '2023-06-01 00:00:00' and t1.`create_time` <= '2023-06-30 23:59:59';

#t1是ref索引
EXPLAIN
SELECT * FROM `order` t1 force index (order_no)
LEFT JOIN `multiple` t2 on t1.`order_no` =t2.`order_no`
where t2.`create_time` >= '2023-06-01 00:00:00' and t2.`create_time` <= '2023-06-30 23:59:59';

#t2是ref索引
EXPLAIN
SELECT * FROM `multiple` t1
LEFT JOIN `order` t2 on t1.`order_no` =t2.`order_no`
where t1.`create_time` >= '2023-06-01 00:00:00' and t1.`create_time` <= '2023-06-30 23:59:59';

mysql 联合表查询从表即使有索引依然ALL的一个原因-索引ALL解决,字符编码方式不一致导致全表搜索的更多相关文章
- mysql 联合表查询从表即使有索引依然ALL的一个原因
那就是主表和从表的关联字段的编码方式不一样!!! 晕啊,折腾了半天才发现,可能是不知道啥时候mysql更改主体编码方式了,结果导致后来新建的表的关联字段和之前的主表的字段的编码方式不一样 改成一样的编 ...
- Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题
Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题 表更描述: 将mysql数据库中的worktask表添加ishaspic字段. 具体操作:(1)数据库worktask表新添是否有图片字 ...
- 对于大量left join 的表查询,可以在关键的 连接节点字段上创建索引。
对于大量left join 的表查询,可以在关键的 连接节点字段上创建索引. 问题: 大量的left join 怎么优化 select a.id,a.num,b.num,b.pcs,c.num, c. ...
- mysql不会使用索引,导致全表扫描情况
不会使用索引,导致全表扫描情况 1.不要使用in操作符,这样数据库会进行全表扫描,推荐方案:在业务密集的SQL当中尽量不采用IN操作符 2.not in 使用not in也不会走索引推荐方案:用not ...
- 如何优雅的使用 参数 is null而不导致全表扫描(破坏索引)
相信大家在很多实际业务中(特别是后台系统)会使用到各种筛选条件来筛选结果集 首先添加测试数据 ), Age INT) go CREATE INDEX idx_age ON TempList (Age) ...
- 11月28日内容总结——多表查询的两种方法及部分小知识点、可视化软件Navicat安装及简单使用讲解及多表查询练习题、python代码操作MySQL(pymysql模块)
目录 一.多表查询的两种方法 方式1:连表操作 inner join(内连接) left join(左连接) right join(右连接) union(全连接) 方式2:子查询 二.小知识点补充说明 ...
- Oracle收集对表收集统计信息导致全表扫描直接路径读?
direct path read深入解析 前言 最近碰到一件很奇葩的事情,因为某条SQL执行缓慢,原因是走了笛卡尔(两组大数据结果集),而且笛卡尔还是NL的一个部分,要循环31M次. 很容易发现是统计 ...
- mysql中设置默认字符编码为utf-8
使用过Linux的同志就知道,在Linux下安装mysql,尤其是使用yum安装的时候,我们是没法选择其默认的字符编码方式.这个就是一个比较头痛的问题,如果Linux数据库中使用到中文的时候,乱码问题 ...
- MySQL多表查询合并结果union all,内连接查询
MySQL多表查询合并结果和内连接查询 1.使用union和union all合并两个查询结果:select 字段名 from tablename1 union select 字段名 from tab ...
- MYSQl 全表扫描以及查询性能
MYSQl 全表扫描以及查询性能 -- 本文章仅用于学习,记录 一. Mysql在一些情况下全表检索比索引查询更快: 1.表格数据很少,使用全表检索会比使用索引检索更快.一般当表格总数据小于10行并且 ...
随机推荐
- 谈谈C++新标准带来的属性(Attribute)
简介: 从C++11开始,标准引入了一个新概念"属性(attribute)",本文将简单介绍一下目前在C++标准中已经添加的各个属性以及常用属性的具体应用. 作者 | 寒冬来源 | ...
- [FAQ] 腾讯企业邮箱成员的名字如何多次更改 ?
可以通过给成员的邮箱增加别名,先点击成员信息最右侧的 "编辑",在编辑页面顶部的 "更多操作" 这个按钮中,比较隐蔽. Refer:腾讯邮箱成员名字更改 Lin ...
- WPF 布局 在有限空间内让两个元素尽可能撑开的例子
我在尝试写一个显示本机 WIFI 热点的账号和密码的控件,要求此控件在有限的空间内显示.但是尽可能显示出热点的账号和密码.而热点的账号和密码是用户配置的,也许长度很长.我的需求是在假如账号的长度较短的 ...
- WPF 如何获取有哪些 VisualBrush 用了某个控件
我写了一个特殊的控件,我期望了解到有哪些 VisualBrush 捕获了此控件,或者说有哪些 VisualBrush 用了此控件的界面 本文的方法需要用到反射,需要使用 WPF 框架里面没有公开的字段 ...
- Quartus prime 的安装步骤:
- 大模型_2.1:Prompt进阶
目录: 1.Prompt frameWork 2.Prompt 结构化格式 3.如何写好结构化 Prompt ? 4.Zero-Shot Prompts 5.Few-Shot Prompting 6. ...
- Git/SourceTree版本管理
目录 视频课程: 工作区: 文件状态: 回退版本: 合并分支 合并提交 冲突 删除分支 忽略文件 汉英对照表 多端同步 添加远程仓库 推送代码到远程仓库 拉取代码 视频课程: https://www. ...
- 🔥🔥v1.9.2-httpsok快速申请免费谷歌SSL证书
v1.9.2-httpsok快速申请免费谷歌SSL证书 介绍 httpsok 是一个便捷的 HTTPS 证书自动续签工具,专为 Nginx .OpenResty 服务器设计.已服务众多中小企业,稳定. ...
- 2D空间中比较两三角形相交与包含
在处理UV重叠.CPU的ZFighting检测时会遇到2D空间中的三角形相交问题, 网上普遍是3D空间的相交解法,因此写本文研究下,不过虽然实现了需求, 但用的方法比较暴力. 效果如图: (鼠标拖动区 ...
- TypingLearn解决了我在学习英语中的一大痛点
上一次在博客园发贴还是在上一次(2021年),那个时候博客园就遇到了危机(被罚款).彼时在疫情期间,我个人生活也受到了影响,先后去了多个城市,最终在上海找到了 .NET Web开发的岗位,还是比较幸运 ...