跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • Oracle 执行 SQL 命令时如何将排序限定在子查询内?
未分類
29 12 月 2020

Oracle 执行 SQL 命令时如何将排序限定在子查询内?

Oracle 执行 SQL 命令时如何将排序限定在子查询内?

資深大佬 : LeeReamond 0

现有一表,行数为一千万。

内含三列 , 分别代表学生 ID, 插入时间,值

sid(int) ,stime(date), sgrade(int)

该表为 sid 和 stime 的复合索引。

执行如下语句

SELECT * FROM TABLE WHERE SID = 0 

得到 5000 条数据,搜索时间 0.2 秒符合预期

然而希望将结果按时间排序时,

SELECT * FROM TABLE WHERE SID = 0 ORDER BY STIME DESC  

执行时间变成 13 秒,显然不符合预期。我推测是因为 oracle 首先对全表进行 order 操作,而后从中取出 sid=0 的部分,导致速度变慢。

于是尝试用子查询:

SELECT * FROM (SELECT * FROM TABLE WHERE SID = 0) ORDER BY STIME DESC  

执行时间 26 秒,不能理解原因

有没有大佬讲一下这个操作怎么实现,感觉 oracle 和 mysql 虽然都用 sql 语言写,但是差很多很多。

我的期望表现是,既然 0.2 秒能取出指定数据,那么再花 0.1 秒时间进行排序是正常的,否则不正常。

谢谢

大佬有話說 (4)

  • 資深大佬 : liprais

    你会看执行计划么

  • 資深大佬 : ayumilove

    Explain Plan +1

  • 主 資深大佬 : LeeReamond

    @liprais
    @ayumilove
    不会,怎么看啊,大佬教教

  • 資深大佬 : noyidoit

    @LeeReamond 好兄弟,先百度一下,如果看不懂再来问

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具