Oracle Query中的子选择

Gor*_*don 1 oracle performance decorator

任何人都可以告诉我,如果它对Oracle 10g有用,我是否使用:

SELECT col1 FROM myTable WHERE col2 = 'someval' AND col3 = "someotherval"
Run Code Online (Sandbox Code Playgroud)

要么

SELECT col1 FROM
    SELECT col1, col2, col3 FROM (
        SELECT * FROM myTable
    ) WHERE col2 = 'someval'
) WHERE col3 = "someotherval"
Run Code Online (Sandbox Code Playgroud)

根据解释计划,上述成本是相同的,但在性能测量方面我是一个空白.

背景是:在我的应用程序中,我有几个基本查询,我需要在运行时通过任意条件进行修改,以便为不同的客户端提供数据集.WHERE条件和获取的列特定于客户端配置文件,一些配置可能需要查看col2,而其他配置查看col5,依此类推.此外,用户可以在客户端配置之上添加其他条件和列.我正在考虑使用一组装饰器来实现这一点,所以如果以上是相同的性能,我可以保持所有三个查询部分干净地分开.

这是Oracle 10g.表中有几十万行(实际上它是一个视图).

谢谢你的任何建议.

Dav*_*dge 6

通常,Oracle的基于成本的优化器将合并包含视图的查询(或在您的情况下为内嵌视图,这基本上是相同的事情)作为优​​化的查询转换阶段的一部分.

这称为"视图合并",并将您的第二个查询转换为第一个查询.在某些情况下,无法执行全视图合并,但即使这样,也可以允许"谓词推送",因此性能会提高.

http://download.oracle.com/docs/cd/B19306_01/server.102/b14211/optimops.htm#i37745

另见:

http://download.oracle.com/docs/cd/B19306_01/server.102/b14211/optimops.htm#i37745 http://www.oracle.com/pls/db102/to_URL?remark=ranked&urlname=http:% 2F%2Fdownload.oracle.com%2Fdocs%2Fcd%2FB19306_01%2Fserver.102%2Fb14200%2Fsql_elements006.htm%23SQLRF50908 http://download.oracle.com/docs/cd/B19306_01/server.102/b14237/initparams142.htm #REFRN10141 http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/sql_elements006.htm#SQLRF50706

长话短说,你不应该在这里遇到问题.