【问题标题】:How do i enforce indexes when Using Order by clause?使用 Order by 子句时如何强制执行索引?
【发布时间】:2018-01-17 08:30:19
【问题描述】:

where 子句和order by 子句不同那么Oracle 没有识别索引

INNER JOIN ORG_ACCOUNTING_PERIODS p
 ON p.ORG_ROADMARK = c.ORG_ROADMARK
 AND p.ACCOUNTING_PERIOD = c.SERVICE_PERIOD
        where ( c.ORG_ROADMARK =:roadMark )
        and c.ORG_ROADMARK = c.move_road 
        ORDER BY EVENT_DATETIME;

【问题讨论】:

  • 我们需要更多地了解您的表、索引、统计信息等以提供帮助。

标签: oracle performance indexing sql-order-by


【解决方案1】:

当使用index和order by时,order by应该是where子句的子集,因为索引直接应用于where子句。

所以添加--->

INNER JOIN ORG_ACCOUNTING_PERIODS p ON p.ORG_ROADMARK = c.ORG_ROADMARK AND p.ACCOUNTING_PERIOD = c.SERVICE_PERIOD
        where ( c.ORG_ROADMARK =:roadMark )
        and c.ORG_ROADMARK = c.move_road         
        and c.EVENT_DATETIME between :eventFrom AND :eventTo
        ORDER BY EVENT_DATETIME ;

create index --> `CREATE INDEX "CARHIRE_EVENTS_IX" ON "CARHIRE_EVENTS" ("EVENT_DATETIME", "MOVE_ROAD", "ORG_ROADMARK") ;`

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-30
    • 2018-04-29
    • 1970-01-01
    • 2013-04-15
    • 2021-10-11
    • 1970-01-01
    • 2017-09-06
    • 2021-06-18
    相关资源
    最近更新 更多