在新建一张账单结算信息表bill_settlement_info的时候,建立的唯一索引uk_bill_no(bill_no,tenant_id)。由于列表查询用到该表的字段。所以在sql中自然做了jeft join查询。
on条件是bill.billNo=bill_settlement_info.billNo。
自然认为这样的链表会走bill_settlement_info的索引。但是上线生产后,由于生产数据增长很快。立马发现列表查询时,使用bill_settlement_info表中的字段过滤数据时。查询超时。
排查后发现是慢SQL导致。
使用explan分析查询语句发现是连表bill_settlement_info查询时。没有走索引。连表语句:
select * from bill left join bill_settlement_info on bill.bill_no = bill_settlement_info.bill_no
在on条件中加上tenant_id后,重新explan后发现走了索引
select * from bill left join bill_settlement_info on bill.bill_no = bill_settlement_info.bill_no and bill.tenant_id = bill_settlement_info.tenant_id
所以能得出结论。MySql的唯一索引是严格按照左匹配原则的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
2017-06-08 阿里云maven仓库配置
2017-06-08 maven配置全局的jdk和配置局部的jdk