- 论坛徽章:
- 0
|
我发现了一个sql语句要运行15个小时,看查询分析发现都是用了全表扫描,没有用上索引,
以下是查询分析
SELECT a.match_nbr,
b.key_month,
b.serv_id,
b.serv_seq_nbr,
b.exchange_id,
b.serv_type_id,
b.district_id,
b.partner_id,
b.billing_type_id,
b.acct_seq_nbr,
b.acct_id,
b.ticket_type_cd,
b.calling_area_code,
b.calling_nbr,
b.start_date,
b.start_time,
b.end_time,
b.duration,
b.ext_charge charge,
b.due_charge,
b.t_count,
b.rate,
b.operation_serial,
b.task_id
FROM dim_short_nbr a,
base_ticket b
WHERE a.state='S0A'
AND b.called_nbr like a.match_nbr||'%'
INTO TEMP tmp_short_nbr;
Estimated Cost: 1291256064
Estimated # of Rows Returned: 1015735808
1) ibd.b: SEQUENTIAL SCAN
2) ibd.a: SEQUENTIAL SCAN
Filters: (ibd.b.called_nbr LIKE (ibd.a.match_nbr || '%' )AND ibd.a.state
= 'S0A' )
NESTED LOOP JOIN
我在base_ticket表上的called_nbr字段也创建了索引,
我加了SELECT { + INDEX (a.called_nbr)}优化器指示也仍然不管用,还是不能用到索引,其中base_ticket表有3000多万条记录,dim_short_nbr数据量不大,如果用了like字段就不能用索引的话
请问该如何启用base_ticket上的索引?或者有其他方法优化此语句?
[ 本帖最后由 redred5 于 2006-2-15 11:14 编辑 ] |
|