【mysql】查询预期结果10、20、30...100...,但实际10、100、20、30...原因?通过SQL查询和通过Navicate筛选器查询结果不一致原因?

1、问题场景

前端返回的列表数据顺序不是预期的
预期:10、20、30…100…
实际:10、100、20、30…

这个100咋回事?

2、问题分析

前端返回的列表数据顺序不是预期的,就直接数据库查下看看,先是通过Navicate过滤器查了下,是按照10、20、30…100…这样排的,然后用SQL执行查询查了下,又是10、100、20、30…
这就迷惑了,后面百度了下,说是Navicate有缓存,因为这个问题就出现了1次,所以不多讨论,解决办法说是重启下Navicate就好了;

然后就是SQL查询排序结果不是预期10、20、30…100…的问题了。
SQL没有order by, 这时候检查索引,分析SQL,确实走了索引,走索引后,会按照索引列的值进行排序。

3、测试验证

  1. 有索引,SQL语句走索引,且字段为int
    建表:
    在这里插入图片描述

    建索引:

    在这里插入图片描述
    排序结果:
    在这里插入图片描述

    分析SQL:
    在这里插入图片描述
    (分析结果说明该查询会使用名为 index_01 的索引,而不是全表扫描。Using index 表示该查询只需要读取索引树上的信息就能够满足查询需求,不需要额外的随机读取操作,因此查询性能更高。)


  1. 有索引,SQL语句走索引,且字段为varchar

    建表:
    在这里插入图片描述

    建索引:
    在这里插入图片描述

    排序结果:
    在这里插入图片描述

    分析SQL:
    在这里插入图片描述


  1. 无索引,且字段为varchar

    建表:
    在这里插入图片描述
    排序结果:
    在这里插入图片描述
    指定排序字段:
    在这里插入图片描述

4、总结

问题1:

SQL查询出现的排序结果不是预期顺序?
原因:varchar类型字段排序结果是10、20、30…100…,int类型字段排序结果是10、20、30…100…,而该查询SQL走了索引,索引中包含varchar字段,就会按照索引列的值进行排序。
默认SQL查询时默认会通过id排序。

问题2:

通过 sql 查询和通过 Navicate 筛选器查询结果不一致?
原因:小概率出现问题,Navicate缓存,重启下看看查询是否一致。

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宋大米Pro

感谢小主大赏,留言可进互助群~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值