嘿家伙所以有些原因我的桌子正在进行索引快速全扫描。
这是我的查询
SELECT bo.bid,cu.cid
FROM ass2master_booking bo, ass2master_customer cu
WHERE bo.cid = cu.cid
and rownum < 135000;
这是跟踪文件
SELECT bo.bid,cu.cid
FROM ass2master_booking bo, ass2master_customer cu
WHERE bo.cid = cu.cid
and rownum < 135000
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.00 0.00 0 0 0 0
Execute 2 0.00 0.00 0 0 0 0
Fetch 9001 0.19 0.41 387 2131 0 134999
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 9004 0.19 0.41 387 2131 0 134999
Misses in library cache during parse: 0
Optimizer mode: ALL_ROWS
Parsing user id: 5594
Rows Row Source Operation
------- ---------------------------------------------------
134999 COUNT STOPKEY (cr=2131 pr=387 pw=189 time=411804 us)
134999 HASH JOIN (cr=2131 pr=387 pw=189 time=276737 us)
150000 INDEX FAST FULL SCAN CUSTOMER_CID_IDX (cr=320 pr=315 pw=0 time=263 us)(object id 332052)
7412 TABLE ACCESS FULL ASS2MASTER_BOOKING (cr=1811 pr=44 pw=0 time=7566 us)
基本上我被告知要在非结构化数据中添加结构我给了2个包含150,000行的表并确定以下哪种结构是最好的。
上面给出了我选择进行测试的查询。
答案 0 :(得分:1)
您正在选择两个表的大部分,因此索引访问没有意义。 (至少oracle认为)
它使用Index Fast Full Scan而不是Table Access Full,因为它在索引中找到了所需的一切(cu.cid),并且不需要该表。
我不知道你的意思
非聚集索引聚簇索引散列聚类非结构化数据。
更新:
我认为我使用的经验法则是:
如果您需要超过20%的表格,我希望进行全表扫描。 如果您需要少于5%的表,我希望获得某种索引访问。
调整SQL语句时我要做的第一件事就是查看执行计划并检查oracle希望从每个步骤返回的行数。如果这些数字完全错误,那么执行计划可能非常糟糕。