m0_37994675 2022-03-18 17:49 采纳率: 25%
浏览 6

优化sql 有没有回优化查询sql的

            select TABLE_NAME
            from user_tables
            where REGEXP_LIKE(TABLE_NAME ,'^' || #{tablePrefix} || '[0-9]+$')
            ORDER BY TABLE_NAME DESC
            OFFSET 0 Row FETCH NEXT 1 ROWS  ONLY

sql 如上 查询时间20s 作用是 查询最新的天表 有什么办法优化

  • 写回答

1条回答 默认 最新

  • DarkAthena ORACLE应用及数据库设计方案咨询师 2022-03-18 20:54
    关注

    还需要了解一点信息

    1. user_tables的记录数有多少?
    2. 执行这个sql时,耗时最长的几个等待事件是什么?
    3. 不带order by和行数限制时,查询速度怎么样?

    分析:

    1. user_tables中可以查询到当前用户的所有表,而且理论上,表再多也不会多到哪里去(当然不排除某些极端情况),但是由于这实际上是个视图,而且需要访问到数据字典信息,因此不排除当前存在数据字典被占用的情况而导致查询缓慢,所以要看下上面说的1和2的情况
    2. order by 的时候会有一些额外的开销,但不清楚你实际生产是个什么情况,所以需要用上面3的方式来做个对比

    另外,可以尝试下面这个sql,但是可能需要对用到的两个表进行查询授权

    select NAME
      from sys.obj$
     WHERE  TYPE# = 2
       AND OWNER# = (SELECT USER# FROM sys.user$ u WHERE NAME = USER)
       AND  REGEXP_LIKE(NAME ,'^' || #{tablePrefix}|| '[0-9]+$')
         ORDER BY NAME DESC
           OFFSET 0 Row FETCH NEXT 1 ROWS  ONLY
    

    这个是把视图拆开,只获取必要信息,减少了user_tables视图中的很多逻辑

    评论

报告相同问题?

问题事件

  • 创建了问题 3月18日

悬赏问题

  • ¥15 WPF动态创建页面内容
  • ¥15 如何对TBSS的结果进行统计学的分析已完成置换检验,如何在最终的TBSS输出结果提取除具体值及如何做进一步相关性分析
  • ¥15 SQL数据库操作问题
  • ¥100 关于lm339比较电路出现的问题
  • ¥15 Matlab安装yalmip和cplex功能安装失败
  • ¥15 加装宝马安卓中控改变开机画面
  • ¥15 STK安装问题问问大家,这种情况应该怎么办
  • ¥15 关于罗技鼠标宏lua文件的问题
  • ¥15 halcon ocr mlp 识别问题
  • ¥15 已知曲线满足正余弦函数,根据其峰值,还原出整条曲线