sql - oracle查询的查询优化
问题描述
我对查询优化知之甚少,在这里我需要一些帮助。这是我们项目的示例代码,它长期运行的 oracle 查询从 2 个不同的表(student、student_info)中提取数据。
有没有可能优化这个?where
子句“和”操作在这里如何工作?
它在执行 AND 子句时是否保持任何顺序?以下查询如何通过删除 line 的代码使之前和之后有所不同b.student_id in ('a123','b123','c123')
。
我们无权在该表列上添加索引。
我们如何在不创建索引的情况下提高性能。
select a.student_id
max(decode(a.marks_limit, 99.99,100,null )) as max_marks,
b.student_city_code "NYC",
from student a,
student_info b
where a.student_id=b.student_id
and a.student_id in ('a123','b123','c123')
and b.student_id in ('a123','b123','c123')
and b.adress_modified > TO_TIMESTAMP('2003/12/13 10:13:18', 'YYYY/MM/DD HH:MI:SS')
group by a.student_id, b.student_city_code;
解决方案
只是一些建议。
你已经 a.student_id=b.student_id 所以条件 b.student_id 在 ('a123,'b123','c123') 只是一个有用的重复你还应该使用显式连接符号而不是基于 where 子句的旧隐含符号
select a.student_id
max(decode(a.marks_limit, 99.99,100,null )) as max_marks,
b.student_city_code "NYC",
from student a
INNER JOIN student_info b ON a.student_id= b.student_id
WHERE
and a.student_id in ('a123','b123','c123')
and b.adress_modified > TO_TIMESTAMP('2003/12/13 10:13:18', 'YYYY/MM/DD HH:MI:SS')
group by a.student_id, b.student_city_code
为了获得更好的性能,您应该检查表上的复合索引
student_info ( adress_modified, student_id )
或者
student_info ( adress_modified, student_id, student_city_code )
推荐阅读
- c# - 如何使用C#获取中文\日文\韩文Word文档中包含修订或跟踪更改的所有句子
- google-bigquery - 将结算数据导出到 BigQuery 不起作用
- php - 在 EC2 上使用 PHP 的 Dialogflow V2 Webhook
- python - 将带有计算字段的 QuerySet 从键转换为一个或多个 json basead
- spring - 我可以将两个spring mvc项目jar集成到war(Maven Build)吗
- php - local.ERROR:无法与主机 smtp.gmail.com 建立连接
- javascript - 如何在 package.json 中选择“模块”而不是“主”文件
- node.js - WebStorm Node.js TypeScript Express 调试卡在连接到 localhost
- javascript - 如何在 Slick.js 中将点替换为数字到字母?
- ios - iOS 设备上的 Google 地图 iframe 烦人的错误。如何绕过它?