我这有个语句,数据少的时候还可以,一多要卡半天。希望高手能帮我优化一下。select * from (select rownum rn ,t.* from view_m_queue t )a
where a.rn >'0'and booking>= '2005-6-2 0:00:00'and
booking<= '2010-6-18 0:00:00'and rownum<='5'
and QueuenameID='12'and Queuestate='0'order by queueId希望高手告诉我下为什么这样写数据多了会慢?
where a.rn >'0'and booking>= '2005-6-2 0:00:00'and
booking<= '2010-6-18 0:00:00'and rownum<='5'
and QueuenameID='12'and Queuestate='0'order by queueId希望高手告诉我下为什么这样写数据多了会慢?
写错???兄弟你的SQL语句有点乱...
where a.rn <=5 and booking>= '2005-6-2 0:00:00'and
booking<= '2010-6-18 0:00:00'
and QueuenameID='12'and Queuestate='0'order by queueId
我整理后的语句
where a.rn >'0'and booking>= '2005-6-2 0:00:00'and
booking<= '2010-6-18 0:00:00'and rownum<='5'
and QueuenameID='12'and Queuestate='0'order by queueId
第一:a.rn是数值型的吧?
第二:rownum<'5'这是要干什么?
第三:'0'order by queueId是否必要?
下边我只能把优化sql语句的方法简单的描述一下:
一:oracle在解析的时候是将所有的小写字母转换成大写字母
二:在解析的时候oracle是从where语句的从后向前解析所有,要把能够最大限度的去除多余记录的条件放到最后,向前一次增加。
三:如必要可以见索引来提高查询效率
四:如果不必要不要用order by,distinct,group by 这样的语句,太消耗资源,会全表扫面表。
五:优化表的结构,oracle中处理最快的数据类型时数值类型和字符类型,如果可以用char替换varchar2类型的字段,因为char类型比varchar2速度快,但是占得空间要大于varchar2。
你的sql很奇怪。。尤其是那rownum
from employees e, departments d
where
E.EMPLOYEE_ID = 100
and E.DEPARTMENT_ID = D.DEPARTMENT_ID;select E.LAST_NAME,E.SALARY,D.DEPARTMENT_NAME
from employees e, departments d
where
E.DEPARTMENT_ID = D.DEPARTMENT_ID
and
E.EMPLOYEE_ID = 100;