m0_63276480 2022-09-20 13:39 采纳率: 75%
浏览 65
已结题

mysql语句优化查询

问题遇到的现象和发生背景

mysql语句优化
请问下面这句mysql查询语句怎么优化提高查询速度,括号里面的数字字段是可变的。

select id,p_name,small_pic from je_model_sync where all_number_category in ('2528-316-2-0', '421-316-2-3', '421-316-0-0', '2528-316-2-2', '2528-316-1-1', '421-316-4-4', '421-316-5-5', '2528-316-4-1', '421-316-5-3', '2528-316-0-0', '2528-316-2-1', '2589-316-2-3', '2589-316-2-1', '2528-316-0-1', '2589-316-3-1') and (small_classification_sort <=2) order by rand() limit 15
用代码块功能插入代码,请勿粘贴截图

我的数据库all_number_category是一个分类,大概有一万个,每个类名就如“2528-316-2-0”这个,是一个字符串。small_classification_sort其实是每个类名通过权重系数计算的前两个。一个类有的可能有几千张,有的可能就一两张,就是想把每个类的前两张取出来。

  • 写回答

5条回答 默认 最新

  • 夜郎king 2022博客之星IT其它领域TOP 12 2022-09-21 15:25
    关注

    建议如下:
    1、表je_model_sync中的all_number_category创建索引。
    2、sql进行改写,使用union来改写,以in查询为例,可以做如下调整:
    select id,pname,small_pic from je_model_sync where all_number_category = '2528-316-2-0'
    union
    select id,pname,small_pic from je_model_sync where all_number_category = '421-316-2-3'
    union
    select id,pname,small_pic from je_model_sync where all_number_category = '421-316-0-0'
    union
    ...
    这样的坏处可能是sql会比较长,但是加了索引后,查询效率会有很大提升。
    3、mysql8.0以后可以使用with as语句来进行临时表查询,参考语法如下:
    with e as (select '55' as ad from dual)
    select * from biz_student t where t.address = e.ad;
    这样的话,sql能大量的减少,不过在8.0以下的mysql暂时不支持这种语法。

    以上方式希望对您有用。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 9月29日
  • 已采纳回答 9月21日
  • 修改了问题 9月21日
  • 创建了问题 9月20日

悬赏问题

  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装