[英]Oracle 'left outer join' performance issue
我不知道您在使用哪个客户端,但是以sqldeveloper为例,例如选择查询并单击f10,您会看到解释简单的对象 。
阅读此内容,您将能够知道全表扫描的过程 ,单击ctrl + f12将打开调优顾问工具。
我希望这可以帮助您,即使您没有使用sqldeveloper,也许现在您知道有些工具可以帮助您发现问题,并可能决定为where条件中使用的字段创建索引 。
“这里显示完成了全表扫描。当查询具有'where'子句时..不应该进行全表扫描。”
完全不对。 您说除了主键之外没有索引。 您的主键是哪几列? 如果A(a1,b1,c1)
是复合主键,而B(a1,b1,c1)
也是复合主键,则支持该主键的索引在访问WHERE子句谓词时将很有用。
但是在所有其他情况下,数据库没有办法知道哪些行符合WHERE子句中的条件,除了读取表中的每一行并比较列中的值。 如果您要执行27次操作,那无疑会花费一天的时间。
因此,可能您需要在这些列上建立索引。 您还需要考虑这27个WITH子句是否是一个好主意。 开发人员喜欢WITH子句(我包括我自己),因为它们支持查询中的过程流。 但是,关系数据库使用数据集,并且过程流的效率通常比集合操作低得多。 其中的27个缺点似乎是一个危险信号:考虑是否存在一种更好,更SQL-y的查询编写方式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.