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

相关文章

Java中List的contains()方法的使用小结

《Java中List的contains()方法的使用小结》List的contains()方法用于检查列表中是否包含指定的元素,借助equals()方法进行判断,下面就来介绍Java中List的c... 目录详细展开1. 方法签名2. 工作原理3. 使用示例4. 注意事项总结结论:List 的 contain

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

Android中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(

MySQL双主搭建+keepalived高可用的实现

《MySQL双主搭建+keepalived高可用的实现》本文主要介绍了MySQL双主搭建+keepalived高可用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、测试环境准备二、主从搭建1.创建复制用户2.创建复制关系3.开启复制,确认复制是否成功4.同

Python使用自带的base64库进行base64编码和解码

《Python使用自带的base64库进行base64编码和解码》在Python中,处理数据的编码和解码是数据传输和存储中非常普遍的需求,其中,Base64是一种常用的编码方案,本文我将详细介绍如何使... 目录引言使用python的base64库进行编码和解码编码函数解码函数Base64编码的应用场景注意

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

使用Sentinel自定义返回和实现区分来源方式

《使用Sentinel自定义返回和实现区分来源方式》:本文主要介绍使用Sentinel自定义返回和实现区分来源方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Sentinel自定义返回和实现区分来源1. 自定义错误返回2. 实现区分来源总结Sentinel自定

Mysql表的简单操作(基本技能)

《Mysql表的简单操作(基本技能)》在数据库中,表的操作主要包括表的创建、查看、修改、删除等,了解如何操作这些表是数据库管理和开发的基本技能,本文给大家介绍Mysql表的简单操作,感兴趣的朋友一起看... 目录3.1 创建表 3.2 查看表结构3.3 修改表3.4 实践案例:修改表在数据库中,表的操作主要

Pandas使用SQLite3实战

《Pandas使用SQLite3实战》本文主要介绍了Pandas使用SQLite3实战,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1 环境准备2 从 SQLite3VlfrWQzgt 读取数据到 DataFrame基础用法:读

JSON Web Token在登陆中的使用过程

《JSONWebToken在登陆中的使用过程》:本文主要介绍JSONWebToken在登陆中的使用过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录JWT 介绍微服务架构中的 JWT 使用结合微服务网关的 JWT 验证1. 用户登录,生成 JWT2. 自定义过滤