3

假设我有一个使用 Oracle SQo Server 从数据库中获取数据的 SQL 查询,如下所示

select  distinct ORDER_TYPE_name as ORDER_TYPE from 
PRODUCT_MASTER_LIST where PROJECT_ID = 99999
order by  ORDER_TYPE ASC 

我现在有 5000 条记录,订单类型如下:

Red
Yellow
Green
Black 
null
Unclassified

如何通过缩短查询执行时间来优化性能?

注意当我看到执行计划时,通过表有很多完全访问?

4

3 回答 3

4

您可以在这两列上定义索引以防止表扫描。这应该会在很大程度上缩短执行时间。

CREATE INDEX IX_ProductMasterList_OrderType 
ON PRODUCT_MASTER_LIST(PROJECT_ID, ORDER_TYPE);
于 2012-09-27T05:11:19.273 回答
1

我认为 PROJECT_ID 上的索引可能是正确的解决方案。这取决于该柱的选择性。

CREATE INDEX PRODUCT_ML_PRODUCT_ID_IDX ON PRODUCT_MASTER_LIST(PRODUCT_ID);
于 2012-09-27T08:56:37.927 回答
0

如果您计划运行查询经常创建一个绑定变量,这将大大提高性能。

例子:

create or replace procedure dsal(p_empno in number)
as
  begin
    update emp
    set sal=sal*2
    where empno = p_empno;
    commit;
  end;
/

此外,在您要查询的列上创建索引。

CREATE INDEX 
   ix_emp_01 
ON 
   emp (deptno) 
TABLESPACE 
   index_tbs;

注意 TABLESPACE 子句是可选的

于 2012-09-27T05:15:19.473 回答