使用列(ID,QueueTypeId,CreateDateTime,WorkId,InQ,OutQ)引用表WORKQUEUELOG
有一个索引可用于(QueueTypeId,CreateDateTime,Id)
当尝试使用以下查询读取前X个记录时,它将进行全表搜索。
OPEN a_CursorHandle FOR
SELECT * FROM (
SELECT * FROM WORKQUEUELOG tbl
WHERE EX_CLS_WQLOG.FILTER(
tbl.QueueTypeId,
tbl.CreateDateTime,
NULL) = 1
AND EX_CLS_WQLOG.VALIDATION(
tbl.ID ,
tbl.WorkId ,
tbl.InQ ) = 1
ORDER BY tbl.QueueTypeId ASC,tbl.CreateDateTime ASC,tbl.Id ASC)
WHERE ROWNUM <= a_MaxCount;
我们将查询更改为以下内容并开始使用索引进行读取。 即Validaiton函数优先,过滤函数第二。
OPEN a_CursorHandle FOR
SELECT * FROM (
SELECT * FROM WORKQUEUELOG tbl
WHERE EX_CLS_WQLOG.VALIDATION(
tbl.ID ,
tbl.WorkId,
tbl.InQ ) = 1
AND EX_CLS_WQLOG.FILTER(
tbl.QueueTypeId,
tbl.CreateDateTime,
NULL) = 1
ORDER BY tbl.QueueTypeId ASC,tbl.CreateDateTime ASC,tbl.Id ASC)
WHERE ROWNUM <= a_MaxCount;
在oracle中处理SQL语句的顺序是什么?从左到右或从右到左。 从上面的例子来看,这似乎是从右到左。这是一种一贯的行为。有没有其他有效的方法来编写此查询。