ORACLE 倒序查询最新一条性能问题 返回

SqlSugar 沟通中
12 341

SELECT * FROM (SELECT "EVENT_SUB_ID", "EVENT_VALUE", "EVENT_LOC", "EVENT_STAGE", "L3_EVENT_CODE", "EVENT_TIME", "PRODUCTION_EVENT_TYPE", "EVENT_DATA_SOURCE", "POSITION", "PROCEDURE_CODE", "PROCESS_EVENT_CODE", "PROCESS_EVENT_NAME", "MANUAL_INPUT_USER", "MANUAL_INPUT_TIME", "CAST_STATUS_RECORD_ID", "HEAT_STATUS_RECORD_ID", "REMARK", "DATA_FLAG", "IS_DELETED", "RECORD_ID", "CREATE_USER_ID", "CREATE_TIME", "CREATE_USER_NAME", "UPDATE_USER_ID", "UPDATE_TIME", "UPDATE_USER_NAME", ROW_NUMBER() OVER(ORDER BY "EVENT_TIME" DESC) AS RowIndex FROM "EM_PRODUCTION_EVENTS_HEAT_SMELT" ) T WHERE RowIndex BETWEEN 1 AND 1

image.png

每次都会全表扫描,能否进行优化

WHERE ROWNUM <= 1;  或者 FETCH FIRST 1 ROW ONLY;


热忱回答12

  • fate sta fate sta VIP0
    1个月前

    时间字段加上索引试试,表结构合理肯定会走索引

    0 回复
  • fate sta fate sta VIP0
    1个月前
    FETCH FIRST 1 ROW ONLY;

     高版本oracle才支持,不能兼容低版本

    0 回复
  • fate sta fate sta VIP0
    1个月前

    SELECT * FROM (

      SELECT * FROM my_table

      ORDER BY some_column

    )

    WHERE ROWNUM <= 1;

    如果是rownum也是需要子查询的。

    0 回复
  • beginner beginner VIP0
    1个月前

    索引都是加了的,IS_DELETED,EVENT_TIME  两个字段是复合索引

    是都需要子查询,

    ROW_NUMBER() 是全表排序且全表扫描 性能极差,

    ROWNUM      不会进行全表排序      



    0 回复
  • beginner beginner VIP0
    1个月前

    你可以测试一下,单张表有5W+的数据,然后IS_DELETED,EVENT_TIME 都建立索引,使用 ROW_NUMBER()ROWNUM       查询性能差很多

    0 回复
  • fate sta fate sta VIP0
    1个月前

     SqlSugarCore 5.1.4.206-preview22


    按你的要求修化了。

    0 回复
  • fate sta fate sta VIP0
    1个月前

    过五分钟后安装预览版本。 

    0 回复
  • beginner beginner VIP0
    1个月前

    image.png

    为啥要套3个select?

    0 回复
  • fate sta fate sta VIP0
    1个月前

    @beginner:用的现成的分页方法。后面在优化。目前这个方法性能OK的

    0 回复
  • beginner beginner VIP0
    1个月前

     .net framework   没有发布206版本

    0 回复
  • 过五分钟后安装

    0 回复
  • 过五分钟后安装

    0 回复