|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
时间:2008-05-04 关键字: oracle 10g 全文索引 优化
问题描述: 1.职位表 c_recruit(大约数据量13W),全文索引表 fulltexthelp(大约数据量13W),企业表 c_info(大约数据量8W) 在此,小生向各位大虾求教,有没有什么办法能够将SQL的CPU占用率降下来?或者有什么启发性的建议,也望大虾们不吝赐教!谢谢! 建表SQL见下面跟帖~~ 全文检索的查询语句如下:
声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
时间:2008-05-04
库表c_recruit 建表sql如下: CREATE TABLE TEST.C_RECRUIT
|
|
| 返回顶楼 | |
|
时间:2008-05-04
库表 FULLTEXTHELP 的建表 SQL: CREATE TABLE TEST.FULLTEXTHELP
|
|
| 返回顶楼 | |
|
时间:2008-05-07
LZ可以试着把contains查询条件去掉,确认瓶颈是否在contains语句上
如果,的确是因为这个语句的问题,就应该想办法让contains语句成为最后一个被使用的查询条件, (这也取决于你的优化策略) 不过,我注意到SQL语句中有一个关于“C_RECRUIT_PK”的HINT,很是不解 SQL用ROW_NUMBER()重写如下:
SELECT tmp.*
FROM (
SELECT
/*+index(r C_RECRUIT_PK) */
ROW_NUMBER() OVER(ORDER BY f.release_time DESC, f.ID DESC) AS ROW_NO,
r.recruit_id,
r.job_name_cn,
r.salary,
i.company_id,
i.company_name
FROM c_recruit r
INNER JOIN fulltexthelp f ON
r.recruit_id = f.ID
INNER JOIN c_info i ON
f.company_id = i.company_id
WHERE
AND contains (f.fulltext, '销售') > 0
AND f.contract_status > 0
AND f.recruit_type = 1
AND r.release_status = 1
AND r.recruit_type = 1
AND r.release_time >= SYSDATE - 60
AND f.release_time >= SYSDATE - 60
AND r.release_time + r.hold_day >= SYSDATE
AND r.approved_status = 1
AND r.release_status = 1
AND i.is_lock_flag = 0
AND i.approved_status = 1
) tmp
WHERE tmp.ROW_NO >= 1
AND tmp.ROW_NO <= 100
我个人认为“contains (f.fulltext, '销售') > 0”不应该会引起大量的实时运算 所以我怀疑LZ的CONTEXT索引同步机制可能有问题 关于CONTEXT索引,可以参照这篇文章: http://epub.itpub.net/4/1.htm |
|
| 返回顶楼 | |
浏览 321 次



