cd 发帖数: 32 | 1 碰到下面一段SQL查询,执行时间特别长。 在没有其他额外信息提供的前提下,请问各
位高手,可以对它作哪些方面的优化呢? 谢过!
SELECT /*+ index(c SYS_C002562) index(t sys_c002901) index(b pk_bpi_csid_tid
)
index(si si_pk) index(u sys_c002956) index(e sys_c002587) */
DECODE (LENGTH (e.e_last_name),0, u.user_id, e.e_last_name || ', ' || e.e_fi
rst_name) salesperson_name,
t.ca_care_id AS account_number, t.t_mobile_number AS mobile_number,
c.cs_id AS transaction_number,
TO_DATE (cs_date_of_creation, 'DD-MON-YYYY') AS date_time_so | w*******e 发帖数: 1622 | 2 ft, 大致看了看, 怎么的也应该用inner join吧.....
tid
fi
【在 cd 的大作中提到】 : 碰到下面一段SQL查询,执行时间特别长。 在没有其他额外信息提供的前提下,请问各 : 位高手,可以对它作哪些方面的优化呢? 谢过! : SELECT /*+ index(c SYS_C002562) index(t sys_c002901) index(b pk_bpi_csid_tid : ) : index(si si_pk) index(u sys_c002956) index(e sys_c002587) */ : DECODE (LENGTH (e.e_last_name),0, u.user_id, e.e_last_name || ', ' || e.e_fi : rst_name) salesperson_name, : t.ca_care_id AS account_number, t.t_mobile_number AS mobile_number, : c.cs_id AS transaction_number, : TO_DATE (cs_date_of_creation, 'DD-MON-YYYY') AS date_time_so
| t*****g 发帖数: 1275 | 3 explain plan 一下
tid
fi
【在 cd 的大作中提到】 : 碰到下面一段SQL查询,执行时间特别长。 在没有其他额外信息提供的前提下,请问各 : 位高手,可以对它作哪些方面的优化呢? 谢过! : SELECT /*+ index(c SYS_C002562) index(t sys_c002901) index(b pk_bpi_csid_tid : ) : index(si si_pk) index(u sys_c002956) index(e sys_c002587) */ : DECODE (LENGTH (e.e_last_name),0, u.user_id, e.e_last_name || ', ' || e.e_fi : rst_name) salesperson_name, : t.ca_care_id AS account_number, t.t_mobile_number AS mobile_number, : c.cs_id AS transaction_number, : TO_DATE (cs_date_of_creation, 'DD-MON-YYYY') AS date_time_so
| cd 发帖数: 32 | 4 明天能access数据库的时候explain plan之后再来报告 呵呵
【在 t*****g 的大作中提到】 : explain plan 一下 : : tid : fi
| cd 发帖数: 32 | 5 咋整? 俺是菜鸟。。。
【在 w*******e 的大作中提到】 : ft, 大致看了看, 怎么的也应该用inner join吧..... : : tid : fi
| w*******e 发帖数: 1622 | 6 就你这段吧:
"SELECT ......
FROM USERS u,
EMPLOYEE e,
TRANSACTIONS t,
SALE_ITEMS si,
CUSTOMER_ACCOUNT ca,
CUSTOMER_SESSION c
WHERE t.user_id = u.user_id
AND u.e_number = e.e_number
AND c.cs_id = t.cs_id
AND si.cs_id = t.cs_id
AND si.t_id = t.t_id
AND t.ca_care_id = ca.ca_care_id
....."
怎么的也得写成下面的吧:
SELECT ....
FROM USERS u
INNER JOIN EMPLOYEE e ON u.e_number = e.e_number
INNER JOIN TRANSACTIONS t ON t.user_id = u.user_id
INNER JOIN .....
....照着样 | cd 发帖数: 32 | 7 多谢多谢!
【在 w*******e 的大作中提到】 : 就你这段吧: : "SELECT ...... : FROM USERS u, : EMPLOYEE e, : TRANSACTIONS t, : SALE_ITEMS si, : CUSTOMER_ACCOUNT ca, : CUSTOMER_SESSION c : WHERE t.user_id = u.user_id : AND u.e_number = e.e_number
| x***e 发帖数: 2449 | 8 usually, it is about the same.
no harm to try though.
【在 cd 的大作中提到】 : 多谢多谢!
| w*r 发帖数: 2421 | 9 build a tree diagram of your query you will find that you have several
tables scanned multiple times
i re-write your query by eliminating the IN() construct. Usually the IN
construct is not well optimized in most of RDBMS system. In addition to this
, I believe you can use OLAP MAX() PARTITION BY() function to eliminate the
cs_of_date subquery.
SELECT
DECODE (LENGTH (e.e_last_name),0, u.user_id, e.e_last_name || ', ' || e.
e_fi
rst_name) salesperson_name,
t.ca_care_id AS account_numb |
|