在一个优化器为COST的Oracle数据库中有表CELLSCHCTRL,结构如下:
 CREATE TABLE CELLSCHCTRL
(
  CITYID            VARCHAR2(10 BYTE),
  CITYNAME          VARCHAR2(16 BYTE),
  DEVICENAME        VARCHAR2(100 BYTE),
  BSCNAME           VARCHAR2(25 BYTE),
  CELLNAME          VARCHAR2(100 BYTE),
  OCCURDATE         DATE,
  LOGTIME           DATE,
  CELL_CI           VARCHAR2(15 BYTE),
  CELL_LAC          VARCHAR2(15 BYTE),
  DATASERVER_IP     VARCHAR2(20 BYTE),
  CELL_SCH_CTRL001  VARCHAR2(100 BYTE),
  CELL_SCH_CTRL002  NUMBER,
  CELL_SCH_CTRL003  NUMBER,
  CELL_SCH_CTRL004  NUMBER,
  CELL_SCH_CTRL005  NUMBER
)
--建立主键
ALTER TABLE CELLSCHCTRL ADD (
  CONSTRAINT CELLSCHCTRL_0901_PK
 PRIMARY KEY
 (CITYID, CITYNAME, BSCNAME, LOGTIME, CELL_CI, CELL_LAC)
--建立函数索引
CREATE INDEX IDX_CELLSCHCTRL_LOGTIME_DAY ON CELLSCHCTRL
(TO_CHAR("LOGTIME",'YYYY-MM-DD'))
--建立函数索引
CREATE INDEX IDX_CELLSCHCTRL_LOGTIME_HOUR ON CELLSCHCTRL
(TO_CHAR("LOGTIME",'YYYY-MM-DD HH24'))
--建立索引
CREATE INDEX IDX_CELLSCHCTRL_CELL_CI ON CELLSCHCTRL (CELL_CI)
--建立索引
CREATE INDEX IDX_CELLSCHCTRL_CELLNAME ON CELLSCHCTRL (CELLNAME)
该表经过分析后,下列哪些语句不能用到索引?为什么?
A、Select * from CELLSCHCTRL
where to_char(logtime,’yyyy-mm-dd hh24’) > ‘2009-6-1’
 
B、select * from CELLSCHCTRL  
where CITYID =’0431’ and  CELL_LAC = 19876   C、select * from CELLSCHCTRL Where CELL_CI = 62589 D、select  * from CELLSCHCTRL
Where OCCURDATE = to_date(‘2009-6-1’,’YYYY-MM-DD’)E、Select * from CELLSCHCTRL
where logtime > to_date(‘2009-6-1’,’YYYY-MM-DD’)F、select * from CELLSCHCTRL Where cellname like ‘%WUMao%’ G、select  * from CELLSCHCTRL Where cellname = ‘YIDONGSHUNIU’ORDER BY LOGTIME 

解决方案 »

  1.   

    恩  还有吗?
    关键是我做这个题目 被人说错了很多
    我的答案:
    CDE不行   其它都可以公司的人扫了一眼  说只看了前面四个 就都错了
    我很不服气  
    求大虾们帮我解答下   究竟那些不可以  如果不可以又是什么原因
    尤其是前面四个问题
    谢谢
      

  2.   

    A,因为使用了 > 符号,在比较时候单个记录会依次比较,若换成 >= 会应用到索引.
    B,虽然条件中两个字段都是主键的一部分,但是因为该表是多值联合主键,而oracle在给表建主键索引时,是建一条索引应用到联合主键所有列上,使用部分列不会应用到该主键索引,甚至,即使条件中包含了联合主键所有列,但如果顺序不对或者其中某一列上应用了函数,也不会应用到索引。解释A属个人理解,不一定正确。
      

  3.   

    都不能
    A to_char(logtime,’yyyy-mm-dd hh24’) 没有建索引
    B 联合主键,所以要写全了才走索引
    C 同上
    D 同1
    E 同1
    F 有like
    G 有order 
      

  4.   

    A 他建了函数索引
    C 该列建了索引
    G order by只会影响结果排序,查询还是会应用到索引
      

  5.   

    A 他建了函数索引 我试了一下 把Select * 改成 Select logtime(任意字段),索引走了 不知道为什么
    C 该列建了索引  呵呵 刚才没看到
    G 恩 order by不影响索引 ,和max,min一样
      

  6.   

    A:这个索引也起作用,但速度不如>=快。
    C:索引起作用。
    G:如果LOGTIME字段是必填项,索引也可以起作用。
      

  7.   

    晕哦
    关于A,需要写成'YYYY-MM-DD'才走索引
      

  8.   

     测试了下 发现B和G走了索引。C也不走索引因为CELL_CI字段是varchar2类型 。CELL_CI = 62589 不会走索引,CELL_CI = ‘62589’ 这样会走索引。