我用的是Oracle9i数据库,SQL语句如下:
SELECT d.bureau_name, b.user_name, b.bind_tel, b.u_adsl_id, a.begintime, a.endtime, a.source, c.user_name,a.error_no
FROM t_accept_cases a, t_adsl_users b, t_sys_users c, t_bureaus d
WHERE a.a_user_id = b.a_user_id
AND a.s_user_id = c.s_user_id(+)
AND b.bureau_id = d.bureau_id
AND b.bureau_id = 'B00215'
AND a.begintime >= TO_DATE('2007-03-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')
其中t_accept_cases表大约有30万条记录。
执行了该条SQL语句,过了10多分钟也不见查询结果返回。试着在该SQL语句中去掉了最后一个AND子句即“AND a.begintime >= TO_DATE('2007-03-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss') ”然后执行,不到1秒就返回了查询结果。后在t_accept_cases表的begintime字段上加了索引,重新执行原来的SQL语句,结果还是一样,过了10多分钟也不见查询结果返回。为何多了这个限制时间的条件后,查询速度会一落千丈呢?恳请各位高手相助!
SELECT d.bureau_name, b.user_name, b.bind_tel, b.u_adsl_id, a.begintime, a.endtime, a.source, c.user_name,a.error_no
FROM t_accept_cases a, t_adsl_users b, t_sys_users c, t_bureaus d
WHERE a.a_user_id = b.a_user_id
AND a.s_user_id = c.s_user_id(+)
AND b.bureau_id = d.bureau_id
AND b.bureau_id = 'B00215'
AND a.begintime >= TO_DATE('2007-03-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')
其中t_accept_cases表大约有30万条记录。
执行了该条SQL语句,过了10多分钟也不见查询结果返回。试着在该SQL语句中去掉了最后一个AND子句即“AND a.begintime >= TO_DATE('2007-03-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss') ”然后执行,不到1秒就返回了查询结果。后在t_accept_cases表的begintime字段上加了索引,重新执行原来的SQL语句,结果还是一样,过了10多分钟也不见查询结果返回。为何多了这个限制时间的条件后,查询速度会一落千丈呢?恳请各位高手相助!
FROM t_accept_cases a, t_adsl_users b, t_sys_users c, t_bureaus d
WHERE a.begintime >= TO_DATE('2007-03-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')
and a.a_user_id = b.a_user_id
AND a.s_user_id = c.s_user_id(+)
AND b.bureau_id = d.bureau_id
AND b.bureau_id = 'B00215'你把这个时间条件放到紧跟WHERE后面的位置试试看