oracle 索引 是走where条后面的 字段 还是select 后面的字段?

灵魂-Alex 2016-01-18 11:19:51
新手问题,刚学索引。
不知道索引的机制是如何的。
创建索引是根据where后面常用的字段,还是基于SELECT XX后面的出现的字段

还有另外一个问题现在我测试库有几百万的数据单单查询一个表都要几秒我想优化一下
SELECT * FROM (SELECT E.EMPNO, E. ENAME, E.JOB, E.MGR, E. HIREDATE, E.SAL, E.COMM, E. DEPTNO, E.OPT_ID, O.FULL_NAME AS OPR_NAME , O.PRSNL_CODE AS OPR_CODE, E.SEX, E.STATUS, E.LEAVEDDATE, E. LEAVINGREASON, E.CREATETIME, E. UPDATETIME FROM EMP E LEFT OUTER JOIN SYS_PRSNL O ON (E.OPT_ID = O.PRSNL_ID ) WHERE ((HIREDATE >= TO_DATE('19890118', 'YYYYMMDD')) AND (HIREDATE <= TO_DATE('20190118', 'YYYYMMDD'))) ORDER BY EMPNO) WHERE ROWNUM <= 1000

第一个SELECT * FROM 是框架里写死的,子查询才是我自己写的。
我想到的是用索引解决。所以就引出了上面的问题。还有其他办法吗?
我想不可能查一个表,里面几百万数据就需要查2-3秒的数据。这样太慢了吧。
请教各路大神指教一下!! 谢谢
...全文
851 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
灵魂-Alex 2016-01-22
  • 打赏
  • 举报
回复
引用 5 楼 ls_rose 的回复:
顺序是 having ,FROM ,在WHERE限制条件
谢谢 学到东西了哈哈
ls_rose 2016-01-21
  • 打赏
  • 举报
回复
顺序是 having ,FROM ,在WHERE限制条件
lhdz_bj 2016-01-19
  • 打赏
  • 举报
回复
1、where子句,也得结合整语句。 2、学优化前,需要打好基础,如果基础不扎实,即使花钱找人学,也是学不好的。 个人建议,仅供参考。
xiaobluesky 2016-01-19
  • 打赏
  • 举报
回复
一般是走的where条件,但也有特殊情况,比如sum,count索引列,等等。。 你的问题也比较简单,一,能一句话写完的,不要使用子查询,会使oracle需要扫描两次。。二,你的是范围扫描,慢正常,如果使用索引精确查询的话会快很多。。
灵魂-Alex 2016-01-19
  • 打赏
  • 举报
回复
引用 2 楼 LHDZ_BJ 的回复:
1、where子句,也得结合整语句。 2、学优化前,需要打好基础,如果基础不扎实,即使花钱找人学,也是学不好的。 个人建议,仅供参考。
谢谢建议。
空心兜兜 2016-01-18
  • 打赏
  • 举报
回复
应该是走where

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧