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

相关文章

GO语言中函数命名返回值的使用

《GO语言中函数命名返回值的使用》在Go语言中,函数可以为其返回值指定名称,这被称为命名返回值或命名返回参数,这种特性可以使代码更清晰,特别是在返回多个值时,感兴趣的可以了解一下... 目录基本语法函数命名返回特点代码示例命名特点基本语法func functionName(parameters) (nam

使用shardingsphere实现mysql数据库分片方式

《使用shardingsphere实现mysql数据库分片方式》本文介绍如何使用ShardingSphere-JDBC在SpringBoot中实现MySQL水平分库,涵盖分片策略、路由算法及零侵入配置... 目录一、ShardingSphere 简介1.1 对比1.2 核心概念1.3 Sharding-Sp

Java 正则表达式的使用实战案例

《Java正则表达式的使用实战案例》本文详细介绍了Java正则表达式的使用方法,涵盖语法细节、核心类方法、高级特性及实战案例,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录一、正则表达式语法详解1. 基础字符匹配2. 字符类([]定义)3. 量词(控制匹配次数)4. 边

Python Counter 函数使用案例

《PythonCounter函数使用案例》Counter是collections模块中的一个类,专门用于对可迭代对象中的元素进行计数,接下来通过本文给大家介绍PythonCounter函数使用案例... 目录一、Counter函数概述二、基本使用案例(一)列表元素计数(二)字符串字符计数(三)元组计数三、C

使用Spring Cache本地缓存示例代码

《使用SpringCache本地缓存示例代码》缓存是提高应用程序性能的重要手段,通过将频繁访问的数据存储在内存中,可以减少数据库访问次数,从而加速数据读取,:本文主要介绍使用SpringCac... 目录一、Spring Cache简介核心特点:二、基础配置1. 添加依赖2. 启用缓存3. 缓存配置方案方案

使用Python的requests库来发送HTTP请求的操作指南

《使用Python的requests库来发送HTTP请求的操作指南》使用Python的requests库发送HTTP请求是非常简单和直观的,requests库提供了丰富的API,可以发送各种类型的HT... 目录前言1. 安装 requests 库2. 发送 GET 请求3. 发送 POST 请求4. 发送

MySQL 表空却 ibd 文件过大的问题及解决方法

《MySQL表空却ibd文件过大的问题及解决方法》本文给大家介绍MySQL表空却ibd文件过大的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录一、问题背景:表空却 “吃满” 磁盘的怪事二、问题复现:一步步编程还原异常场景1. 准备测试源表与数据

Mac电脑如何通过 IntelliJ IDEA 远程连接 MySQL

《Mac电脑如何通过IntelliJIDEA远程连接MySQL》本文详解Mac通过IntelliJIDEA远程连接MySQL的步骤,本文通过图文并茂的形式给大家介绍的非常详细,感兴趣的朋友跟... 目录MAC电脑通过 IntelliJ IDEA 远程连接 mysql 的详细教程一、前缀条件确认二、打开 ID

Nginx中配置使用非默认80端口进行服务的完整指南

《Nginx中配置使用非默认80端口进行服务的完整指南》在实际生产环境中,我们经常需要将Nginx配置在其他端口上运行,本文将详细介绍如何在Nginx中配置使用非默认端口进行服务,希望对大家有所帮助... 目录一、为什么需要使用非默认端口二、配置Nginx使用非默认端口的基本方法2.1 修改listen指令

Python WebSockets 库从基础到实战使用举例

《PythonWebSockets库从基础到实战使用举例》WebSocket是一种全双工、持久化的网络通信协议,适用于需要低延迟的应用,如实时聊天、股票行情推送、在线协作、多人游戏等,本文给大家介... 目录1. 引言2. 为什么使用 WebSocket?3. 安装 WebSockets 库4. 使用 We