我试图理解oracle中的解释计划,并想知道oracle在形成解释计划时考虑了什么条件。
我正在测试oracle 11g中显示的HR模式中的一个简单查询。
select * from countries
where region_id in (select region_id from regions where region_name = 'Europe');
当我运行以下查询时:
explain plan for
select * from countries
where region_id in (select region_id from regions wher
我已经为我的表的时间戳列创建了索引,但是当我在oracle中查询和检查explain计划时,它正在执行全表扫描而不是范围扫描。
下面是表的DDL脚本
CREATE TABLE EVENT (
event_id VARCHAR2(100) NOT NULL,
status VARCHAR2(50) NOT NULL,
timestamp NUMBER NOT NULL,
action VARCHAR2(50) NOT NULL
);
ALTER TABLE EVENT ADD CONSTRAINT PK_EVENT PRIMARY
我是Oracle的新手,我有一个关于Oracle的解释计划的问题。我已经为特定的查询使用了“自动跟踪”功能。
SQL> SELECT * from myTable;选择11行。已用时间: 00:00:00.01
Execution Plan
----------------------------------------------------------
Plan hash value: 1233351234
----------------------------------------------------------------------------
| Id | Ope
我仍然是SQL方面的新手,如果您能帮助我,我将非常感激。如何获得查询的SQL计划?我用这个来得到一个简短的计划:
EXPLAIN PLAN FOR
SELECT *
FROM custinfo@smartdev2 s_cs
WHERE s_cs.idcust = (SELECT b_cust_id
FROM mlb_test.mt_operation_out
WHERE id = 1230);
SELECT plan_table_output
FROM TABLE (DBMS_XPLAN.
我有20年的SQL经验,但并不是专门使用Oracle的。一位“Oracle专家”向我保证,构建一个不带参数的SQL查询(如下所示):
SELECT t.ID, t.Name, t.Address ... FROM Table1 t WHERE t.ID = 'someID' AND t.Name = 'someName'...
至少和使用参数一样快(如下所示)
SELECT t.ID, t.Name, t.Address ... FROM Table1 t WHERE t.ID = ? AND t.Name = ?
代码在循环中执行。
在我使用过的大多数其他数据
在Oracle企业管理器中,在“Performance> Top”中,您可以单击正在执行的SQL,然后转到plan选项卡查看SQL执行计划。
对于执行计划,Enterprise显示一个包含执行计划步骤的表。该表有以下列:
Operation Object Object Type Order Rows Size (KB) Cost Time (sec) CPU Cost I/O Cost
我想了解每一列的含义,但我没有找到任何关于这方面的文档。
你能给我推荐任何文件或解释列的含义吗?
我已经在表中有一个名为idx_MyTableColumn的索引,名为MyTable。我运行了一个查询
select * from MyTable where MyTableColumn = 'AAA';
然后,我试着为上面的查询运行解释计划,计划告诉我查询的成本是65701。不需要优化。解释计划如下:
我在idx_MyTableColumn表中删除了索引MyTable。
然后,我将一个基于函数的索引idx_UpperMyTableColumn放在MyTable上。
create index idx_UpperMyTableColumn on MyTable( upper
让我们考虑一下这些查询:
select * from person where com_code in (1, 2, 3, 4)
select * from person where com_code in (1, 2, 2, 2)
select * from person where com_code in (1, 2, 3)
select * from person where com_code in (0,1,2,3,4,5,6,7,8,9,10,11,12,13)
它们是否有不同的执行计划存储在Oracle的内存中?换句话说,In参数的数量是否改变了执行计划?会不会有一个参数的执行计划
我正在我们的Saleforce org中排除(或至少确定)导致查询性能差的可能原因。不过,我怀疑我的问题将适用于大多数数据库引擎。
我们的Salesforce组织中有相当多的数据。我们有问题的物体有1500万条记录。我们在我们的组织结构之上构建了一个API,它可以提取数据,而且我们真的在努力提高性能。请知道,我们知道从长远来看有些事情是可以做的,但是我的问题更多的是关于理解数据库的底层查询引擎。
问题是:我们可以运行一个查询:
Select X From Account Where [IndexedField] Like 'value%' LIMIT 1000
由于某些原因,该
我已经尝试了一段时间来提高这个查询的性能,在尝试了多种不同的方法之后,我发现删除ANSI连接并使用常规语法可以根据解释计划显著降低成本 (459928比82518117)。这里是原始的(剪裁和修剪):
select distinct api.locn_id -- Explain Plan: 82518117
,i.item_set_id
,api.variant_id
from all_planogram_items api
join includes i
on api.varian
我有一个oracle更新查询如下:
> UPDATE MAIN_TABLE T1
> SET T1.A_VALUE=(SELECT A_VALUE FROM TEMP_TABLE WHERE A_VALUE = 'NYCM.GN2')
> WHERE
> T1.V_ID IN =7841
> AND T1.S_ID =
> (
> SELECT T2.S_ID
> FROM MAIN_TABLE T1, T2_DETAILS T2
> WHERE T1.S_
我使用编写器从外部调用PostgreSQL并路由我的网络,这是我的代码,
import sys, os
#set up psycopg2 environment
import psycopg2
#driving_distance module
query = """
select *
from driving_distance ($$
select
gid as id,
source::int4 as source,
target::int4 as target,
我在where子句中有一组条件,比如
WHERE
d.attribute3 = 'abcd*'
AND x.STATUS != 'P'
AND x.STATUS != 'J'
AND x.STATUS != 'X'
AND x.STATUS != 'S'
AND x.STATUS != 'D'
AND CURRENT_TIMESTAMP - 1 < x.CREATION_TIMESTAMP
这些条件中的哪一个将首先被执行?我正在使用oracle。
我会在我的执行计划中得到这些细