mysql编码不同是否可使用索引_mysql 2个表字符集不同join时不能正确走索引

本文主要是介绍mysql编码不同是否可使用索引_mysql 2个表字符集不同join时不能正确走索引,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

drop INDEX index_student_s_age on student ;

drop INDEX index_student_s_no on student ;

drop INDEX index_score_point on score ;

drop INDEX index_score_c_id on score ;

--建索引,建标语句中有,可忽略

CREATE INDEX index_student_s_age on student (s_age);

CREATE INDEX index_student_s_no on student (s_no);

CREATE INDEX index_score_point on score (point);

CREATE INDEX index_score_c_id on score (c_id);

三、测试

1、

引用

explain select a.*,b.* from student a , score b

where a.s_no=b.c_id and a.s_no=11

1SIMPLEbconstPRIMARYPRIMARY4const 1

1SIMPLEaref index_student_s_noindex_student_s_no5const1Using where

可以走到索引

2、修改表编码:仍然可以走到索引,说明join key 都是数值仍然可以走到索引

ALTER TABLE student CONVERT TO CHARACTER SET utf8;

explain select a.*,b.* from student a , score b

where a.s_no=b.c_id and a.s_no=14

1SIMPLEbconstPRIMARYPRIMARY4const 1

1SIMPLEaref index_student_s_noindex_student_s_no5const1Using where

3、修改关联字段类型为不同类型,不能正确走到索引

ALTER TABLE score MODIFY c_id VARCHAR(32);

--ALTER TABLE student MODIFY s_no VARCHAR(32);

结论,因为字段类型,编码不同都回造成不能正确走到索引,如果都是数值类型的应该就没问题:

1、2表编码不同, join字段数值类型不同, 不能正常走索引,即使编码相同???

2、2表编码相同,join key都是数值类型,正确走到索引

3、2表编码相同,join key数值类型不同,不能正确走到索引

相关数据:

CREATE TABLE `student` (

`s_no` int(11) DEFAULT NULL,

`s_name` varchar(500) DEFAULT NULL,

`s_age` int(11) DEFAULT NULL,

`s_sex` varchar(10) DEFAULT NULL,

KEY `index_student_s_no` (`s_no`),

KEY `index_student_s_age` (`s_age`)

) ENGINE=InnoDB DEFAULT CHARSET=gbk;

CREATE TABLE `score` (

`c_id` int(11) NOT NULL,

`c_name` varchar(255) DEFAULT NULL,

`point` int(11) DEFAULT NULL,

KEY `index_course_point` (`point`),

KEY `index_course_c_id` (`point`),

KEY `index_score_point` (`point`),

KEY `index_score_c_id` (`c_id`)

) ENGINE=InnoDB DEFAULT CHARSET=gbk;

INSERT INTO `student` VALUES (1, '张无忌', 18, '男');

INSERT INTO `student` VALUES (2, '周芷若', 19, '女');

INSERT INTO `student` VALUES (3, '杨过', 19, '男');

INSERT INTO `student` VALUES (4, '赵敏', 18, '女');

INSERT INTO `student` VALUES (5, '小龙女', 17, '女');

INSERT INTO `student` VALUES (6, '张三丰', 18, '男');

INSERT INTO `student` VALUES (7, '令狐冲', 19, '男');

INSERT INTO `student` VALUES (8, '任盈盈', 20, '女');

INSERT INTO `student` VALUES (9, '岳灵珊', 19, '女');

INSERT INTO `student` VALUES (10, '韦小宝', 18, '男');

INSERT INTO `student` VALUES (11, '康敏', 17, '女');

INSERT INTO `student` VALUES (12, '萧峰', 19, '男');

INSERT INTO `student` VALUES (13, '黄蓉', 18, '女');

INSERT INTO `student` VALUES (14, '郭靖', 19, '男');

INSERT INTO `student` VALUES (15, '周伯通', 19, '男');

INSERT INTO `student` VALUES (16, '瑛姑', 20, '女');

INSERT INTO `student` VALUES (17, '李秋水', 21, '女');

INSERT INTO `student` VALUES (18, '黄药师', 18, '男');

INSERT INTO `student` VALUES (19, '李莫愁', 18, '女');

INSERT INTO `student` VALUES (20, '冯默风', 17, '男');

INSERT INTO `student` VALUES (21, '王重阳', 17, '男');

INSERT INTO `student` VALUES (22, '郭襄', 18, '女');

INSERT INTO `score` VALUES (1, '企业管理', 2);

INSERT INTO `score` VALUES (10, '线性代数', 17);

INSERT INTO `score` VALUES (11, '计算机基础', 13);

INSERT INTO `score` VALUES (12, 'AUTO CAD制图', 15);

INSERT INTO `score` VALUES (13, '平面设计', 11);

INSERT INTO `score` VALUES (14, 'Flash动漫', 1);

INSERT INTO `score` VALUES (15, 'Java开发', 9);

INSERT INTO `score` VALUES (16, 'C#基础', 2);

INSERT INTO `score` VALUES (17, 'Oracl数据库原理', 10);

INSERT INTO `score` VALUES (2, 'max, 8);

INSERT INTO `score` VALUES (3, 'UML', 6);

INSERT INTO `score` VALUES (4, '数据库', 7);

INSERT INTO `score` VALUES (5, '逻辑电路', 6);

INSERT INTO `score` VALUES (6, '英语', 3);

INSERT INTO `score` VALUES (7, '电子电路', 5);

INSERT INTO `score` VALUES (8, 'maozedong思想概论', 4);

INSERT INTO `score` VALUES (9, '西方哲学史', 12);

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2013-12-05 13:59

浏览 4312

分类:数据库

评论

这篇关于mysql编码不同是否可使用索引_mysql 2个表字符集不同join时不能正确走索引的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/797221

相关文章

详解MySQL中DISTINCT去重的核心注意事项

《详解MySQL中DISTINCT去重的核心注意事项》为了实现查询不重复的数据,MySQL提供了DISTINCT关键字,它的主要作用就是对数据表中一个或多个字段重复的数据进行过滤,只返回其中的一条数据... 目录DISTINCT 六大注意事项1. 作用范围:所有 SELECT 字段2. NULL 值的特殊处

SpringBoot中使用Flux实现流式返回的方法小结

《SpringBoot中使用Flux实现流式返回的方法小结》文章介绍流式返回(StreamingResponse)在SpringBoot中通过Flux实现,优势包括提升用户体验、降低内存消耗、支持长连... 目录背景流式返回的核心概念与优势1. 提升用户体验2. 降低内存消耗3. 支持长连接与实时通信在Sp

MySQL 用户创建与授权最佳实践

《MySQL用户创建与授权最佳实践》在MySQL中,用户管理和权限控制是数据库安全的重要组成部分,下面详细介绍如何在MySQL中创建用户并授予适当的权限,感兴趣的朋友跟随小编一起看看吧... 目录mysql 用户创建与授权详解一、MySQL用户管理基础1. 用户账户组成2. 查看现有用户二、创建用户1. 基

MySQL 打开binlog日志的方法及注意事项

《MySQL打开binlog日志的方法及注意事项》本文给大家介绍MySQL打开binlog日志的方法及注意事项,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录一、默认状态二、如何检查 binlog 状态三、如何开启 binlog3.1 临时开启(重启后失效)

SQL BETWEEN 语句的基本用法详解

《SQLBETWEEN语句的基本用法详解》SQLBETWEEN语句是一个用于在SQL查询中指定查询条件的重要工具,它允许用户指定一个范围,用于筛选符合特定条件的记录,本文将详细介绍BETWEEN语... 目录概述BETWEEN 语句的基本用法BETWEEN 语句的示例示例 1:查询年龄在 20 到 30 岁

MySQL DQL从入门到精通

《MySQLDQL从入门到精通》通过DQL,我们可以从数据库中检索出所需的数据,进行各种复杂的数据分析和处理,本文将深入探讨MySQLDQL的各个方面,帮助你全面掌握这一重要技能,感兴趣的朋友跟随小... 目录一、DQL 基础:SELECT 语句入门二、数据过滤:WHERE 子句的使用三、结果排序:ORDE

python使用库爬取m3u8文件的示例

《python使用库爬取m3u8文件的示例》本文主要介绍了python使用库爬取m3u8文件的示例,可以使用requests、m3u8、ffmpeg等库,实现获取、解析、下载视频片段并合并等步骤,具有... 目录一、准备工作二、获取m3u8文件内容三、解析m3u8文件四、下载视频片段五、合并视频片段六、错误

gitlab安装及邮箱配置和常用使用方式

《gitlab安装及邮箱配置和常用使用方式》:本文主要介绍gitlab安装及邮箱配置和常用使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装GitLab2.配置GitLab邮件服务3.GitLab的账号注册邮箱验证及其分组4.gitlab分支和标签的

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

MySQL MCP 服务器安装配置最佳实践

《MySQLMCP服务器安装配置最佳实践》本文介绍MySQLMCP服务器的安装配置方法,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下... 目录mysql MCP 服务器安装配置指南简介功能特点安装方法数据库配置使用MCP Inspector进行调试开发指