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日

悬赏问题

  • ¥15 请提供一个符合要求的网页链接。
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码