今天写了一个sql,其中涉及的表中的数据量都差不多为50w左右,查询发现用了8s。这个只是测试服上数据,放到正式服上,肯定一运行就挂了。

SELECTOrders. NO,GuidNo,Orders.CreateTime,sum(OrderItem.Quantity) AS Quantity,Brand. NAME AS BrandName,member.Mobile,Street AS deliveryaddress,Area
FROMOrders
INNER JOIN OrderItem ON Orders.GuidNo = OrderItem.OrderGuidNo
INNER JOIN Brand ON Brand.Id = Orders.BrandId
INNER JOIN member ON member.Id = 13
INNER JOIN memberaddress ON member.Id = memberaddress.MemberId
WHEREorders.GuidNo IN (SELECTorderpayment.OrderGuidNoFROMpaymentrecordLEFT JOIN orderpayment ON paymentrecord.`No` = orderpayment.PaymentNoWHEREpaymentrecord.PaymentMethod = 'MemberCard'AND paymentrecord.Payer = 13)
GROUP BYGuidNo;

然后就用EXPLAIN分析了一下,发现Orders表没有命中索引,但是查询Orders中的GuidNo已经设置了索引,但就是不能命中。

然后我将上面的语句分为两个语句。首先将sql语句修改为:将子查询的数据直接写在了sql中,查询用了0.12s。

SELECTOrders. NO,GuidNo,Orders.CreateTime,sum(OrderItem.Quantity) AS Quantity,Brand. NAME AS BrandName,member.Mobile,Street AS deliveryaddress,Area
FROMOrders
INNER JOIN OrderItem ON Orders.GuidNo = OrderItem.OrderGuidNo
INNER JOIN Brand ON Brand.Id = Orders.BrandId
INNER JOIN member ON member.Id = 13
INNER JOIN memberaddress ON member.Id = memberaddress.MemberId
WHEREorders.GuidNo IN ('0A499C5B1A82B6322AE99D107D4DA7B8','18A5EE6B1D4E9D76B6346D2F6B836442','327A5AE2BACEA714F8B907865F084503','B42B085E794BA14516CE21C13CF38187','FBC978E1602ED342E5567168E73F0602')
GROUP BYGuidNo

第二个:单独运行子查询的Sql,也才用了0.1s

        SELECTorderpayment.OrderGuidNoFROMpaymentrecordLEFT JOIN orderpayment ON paymentrecord.`No` = orderpayment.PaymentNoWHEREpaymentrecord.PaymentMethod = 'MemberCard'AND paymentrecord.Payer = 13

这么问题就清晰了,一定是子查询和父查询关联的问题。因为子查询单独很快,父查询用子查询数据直接查的时候也很快,就是在他俩结合的时候很慢。大致能将问题锁定在这两个关联字段OrderGuidNo上。

最后发现 orderpayment 表和 Orders 表字符集是不同的。一个表的字符集是:utf8_general_ci,一个是:utf8mb4_general_ci。(不查不知道,发现一个数据库中,很多表的字符集都不相同)

修改orderpayment表的字符集和表中OrderGuidNo的字符集为:utf8_general_ci

ALTER TABLE orderpayment DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; //修改表的字符集ALTER TABLE orderpayment CHANGE OrderGuidNo OrderGuidNo VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci; //修改字段的字符集

然后在用EXPLAIN分析一下,可以看到都用上了索引。

然后运行,查询了0.112秒。

转载于:https://www.cnblogs.com/MicroHeart/p/9597794.html

MySQL中字段字符集不同导致索引不能命中相关推荐

  1. mysql普通索引命中_MySQL中因字段字符集不同导致索引不能命中的解决方法

    什么是索引?为什么要建立索引? 索引用于快速找出在某个列中有一特定值的行,不使用索引,MySQL必须从第一条记录开始读完整个表,直到找出相关的行,表越大,查询数据所花费的时间就越多,如果表中查询的列有 ...

  2. Mysql中字段类型不一致导致索引无效

    修改后 详细见楼下链接 http://ustb80.blog.51cto.com/6139482/1287847 转载于:https://www.cnblogs.com/small8/p/614460 ...

  3. MySQl中文1001无标题_Mysql中字段类型不一致导致索引无效的处理办法

    前两天有个同事算数据,写出来的sql执行很慢.那个sql也很简单,就是一个左联带条件的查询.explain之后发现,其中有一张表没有用到索引.初始以为是没有建索引,于是建上索引再试,发现问题依旧.后来 ...

  4. MySQL表字段字符集不同导致的索引失效问题

    MySQL表字段字符集不同导致的索引失效问题 转自:MySQL表字段字符集不同导致的索引失效问题 1. 概述 昨天在一位同学的MySQL机器上面发现了这样一个问题,MySQL两张表做left join ...

  5. MySQL 字符集不一致导致索引失效的一个真实案例

    文章目录 问题描述 问题分析 总结 大家好,我是只谈技术不剪发的 Tony 老师.今天给大家分析一个由于 MySQL 字符集不一致导致索引失效的案例. 问题描述 有个朋友给我发来一个问题,说是他们的系 ...

  6. Mysql中SQL语句不使用索引的情况

    Mysql中SQL语句不使用索引的情况 MySQL查询不使用索引汇总 众所周知,增加索引是提高查询速度的有效途径,但是很多时候,即使增加了索引,查询仍然不使用索引,这种情况严重影响性能,这里就简单总结 ...

  7. 七、MySQL中的字符集 - 系统的撸一遍MySQL

    2019独角兽企业重金招聘Python工程师标准>>> 什么是字符集? 计算中的字符文字集合(每个自负文字分配一个对应的数字),将字符集中的文字符号进行编码以便于计算机识别处理. 字 ...

  8. 在mysql中如何为连接添加索引_在MySQL中如何为连接添加索引

    http://hackmysql.com/case4 译文: 我先通过一个简单的例子说明在MySQL中如何为连接添加索引,然后再看一个有挑战性的例子. 简单的3个表的连接 表结构很简单,3个表tblA ...

  9. mysql中基字符集_Mysql中的字符集

    1.字符集基础 在计算机的眼中只有0和1,但是在人类世界中却有上百种语言,每种语言又有成千上万的文字,那么如何在计算中表示人类世界中的这些文字呢? 在上个世纪60年代的时候,美国首先定义了一套规则,在 ...

最新文章

  1. [导入]我翻译的JavaScript文章
  2. 我们需要现在就进入LTE时代
  3. C++继承中的普通函数,纯虚函数、虚函数
  4. 跟着《架构探险》学轻量级微服务架构 (一)
  5. Windows10+Ubuntu 18.04.2+ROS 安装笔记(SSD单硬盘)上
  6. 全国大学校园网—拓扑图欣赏
  7. 两个不同的进程 虚拟地址相同_Linux的进程地址空间[一]
  8. LeetCode 144. 树的前序遍历迭代写法
  9. 中缀表达式变后缀分析
  10. 安卓期末大作业(AndroidStudio开发),日记本app,代码注释详细,能正常运行
  11. 利用虚拟打印机截取打印文件并上传到服务器
  12. Redhat 系列漏洞补丁加固
  13. matlab 模的平方,RSA模重复平方算法小示例
  14. RTKLIB-学习笔记
  15. voip系统与网络电话
  16. Android Vibrator
  17. UE4 Engine Fix-找回4.24后失去的Matinee
  18. RuntimeError: cuda runtime error (8) : invalid device function at /pytorch/torch/lib/THC/generic/THC
  19. 跨境电商平台都有哪些
  20. 元宇宙 vs. 数字孪生:技术演化的视角

热门文章

  1. Android EditText回车不换行
  2. BZOJ 1114 Number theory(莫比乌斯反演+预处理)
  3. JAVA中定义常量的几种方式
  4. exe4j中this executable was created with an evaluation错误解决方法
  5. 《构建高可用Linux服务器》样书
  6. Tomcat的虚拟主机的配置
  7. puppet原理及配置
  8. CGAffineTransform与CATransform3D
  9. Spring mvc PostgreSQL 插入timestamp和int8
  10. nginx并发模型与traffic_server并发模型简单比较