• [mysql] join查询没有走索引的原因


    把行数最小的作为主表,然后去join行数多的,这样对于索引而言扫描的行数会少很多

    在join之后On的条件,类型不同是无法走索引的,也就是说如果on A.id = B.id,虽然A表和B表的id都设置了索引,但是A表的id是Int,而B表的id是varchar,则无法走索引

    字符编码也会导致无法走索引。字符编码常见的是utf8和utf8mb4,utf8mb4是可以兼容utf8的,也就是说如果A表是utf8mb4,B表是utf8,则on A.uinstanceid = B. uinstanceid是可以走索引的,但是如果把B表当作主表,让B去join A on B.uinstanceid = A. uinstanceid则无法走索引

    在我的项目里,就是上面的字符编码问题导致的join后没有走索引

    改表和字段的字符编码,统一成ut8mb4

    ALTER TABLE visitor DEFAULT CHARSET utf8mb4;
    ALTER TABLE visitor CHANGE visitor_id visitor_id varchar(100) CHARACTER SET utf8mb4 NOT NULL DEFAULT '';

    开源作品

    GO-FLY,一套可私有化部署的免费开源客服系统,安装过程不超过五分钟(超过你打我 !),基于Golang开发,二进制文件可直接使用无需搭开发环境,下载zip解压即可,仅依赖MySQL数据库,是一个开箱即用的网页在线客服系统,致力于帮助广大开发者/中小站长快速整合私有客服功能
    github地址:go-fly
    官网地址:https://gofly.sopans.com

    赞赏作者

    微信交流

  • 相关阅读:
    焦点
    class类名的管理
    querySelector选择器
    DOM动态添加表格
    Java父类强制转换子类原则
    Maven精选系列--classifier元素妙用
    Git分支管理
    Eclipse代替Oracle接管Java EE
    细数Intellij Idea10个蛋疼问题!
    Git仓库操作命令
  • 原文地址:https://www.cnblogs.com/taoshihan/p/14902207.html
Copyright © 2020-2023  润新知