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日

悬赏问题

  • ¥50 unitywebrequest分段下载导致报错,如何解决?
  • ¥15 错误使用 gretna_GUI_PreprocessInterface>RunBtn_Callback
  • ¥15 WPF如何用Chart绘画出Y轴的左边数据
  • ¥15 pycharm无法查看内置代码
  • ¥15 跑hls xfopencv的例程standalone_hls_axi_example出的错误,csim没问题,c synthesis出的错误
  • ¥15 sqlserver update语句逐行生效
  • ¥20 Windows10系统命令行调用
  • ¥15 php环境如何实现国密SM2相关功能
  • ¥15 关于#单片机#的问题:K210 例程里面提示我iomem.h: No such file or directory
  • ¥15 LSPI算法的大问题