我需要优化查询,以便在搜索数据时有更好的性能,这花了我太长时间,我附上一个例子
这是我正在使用 ORACLE 数据库的查询
SELECT
SM_ID,
ORIGINAL_ADDRESS,
DESTINATION_ADDRESS,
SUBMISSION_TIME,
FINAL_TIME,
SM_STATUS,
ERROR_CODE,
ORG_ACCOUNT,
DEST_ACCOUNT,
MO_MSC_ADDR,
MT_MSC_ADDR
FROM SMS_DATA_SMC
WHERE TRUNC(SUBMISSION_TIME) = TO_DATE('22/11/2018', 'DD-MM-YYYY')
AND MO_MSC_ADDR is not null
AND MO_MSC_ADDR NOT LIKE '569%' AND FINAL_TIME IS NOT NULL
ORDER BY SM_ID
测试
所以它先过滤去掉直接比较的字段,然后涉及到函数调用的部分已经比较过了。
您可能需要创建索引,以便不必读取整个表来过滤它。
你会看到oracle从下往上执行where操作,所以任何不涉及数据转换的语句都会执行得更快,因此oracle就不用做n次了,比如现在在日期变量也减少了。从 trunc 开始,因为它以前通过删除空值来缩小行
最后,一旦查询完成,您只需对查询结果执行排序,而不是对所有数据进行排序和过滤、过滤和排序
如果可能,您应该使用 SUBMISSION_TIME 技巧创建一个列,然后创建该值的索引,最后将其放在 where 的末尾,这将大大改善您的查询