前两天去面试
面试到最后一关:
那个面试的出了一道这样的问题:
select id , name , record from abc where id = 1 and name ='XXX'
假设 abc 表 没有任何 索引和主键
请问 在10亿的记录量来算,
这个语句要耗时多久? 或者写出公式
第二个问题是  如果在这个表上面 添加唯一和索引,请问耗时是多少:?(不计算硬件条件 - -!~ )

解决方案 »

  1.   

    我根本答不出!~
    你说,select 语句 的执行顺序 , 那些 还好答
    但, 要答这个的话, 我真的不知道如何答
      

  2.   

    这个也太难了吧,你是研究生?搞研究的?
    感觉是要求写出SQL的执行原理,又似乎是高深的如何计算数据库时间的算法?调侃下,最简单的
    SQL> set timing on;
    SQL> select id , name , record from abc where id = 1 and name ='XXX'
    SQL> set timing on;
      

  3.   

    表示同情啊,求给点分,我刚刚开始学sql,上次面试了个BI结果碰壁,哎。看在相同遭遇的份上,给点分让我多提提问吧
      

  4.   


    应该是的了, 最后面试官 问我 这个SQL 的执行顺序
    我就说 先筛选where的, 然后再查出来
    这样回答如何?
      

  5.   

    其实还是有些东西可以讲的。1、没有任何 索引和主键
    就意味着不管使用任何查询条件进行SELECT,必定走全表索引2、10亿计算量
    那可以引发另外一个问题,ORACLE内存限制,如果我没记错的话,FOR WIN2k应该是2G.
    剩下的事情,就可以随便策一下,假设1行记录当多少字节计算。
    例如:ID字段是数字型,如何云云,RECORD字段,如果做为CLOB当如何云云,
    自然而然就到了 【写出公式】 这个问题。3、当然,SELECT这句话,本身还意味着另外一个意思,CBO与RBO.
    你可以从9i和11g这两个版本上的默认优化方式说几句。第二个问题是 如果在这个表上面 添加唯一和索引,请问耗时是多少:?
    --这一点不是很确定,就当我没说
    4、已有数据添加主键或索引时,会在内存表内建立建对应的索引表,如果超过内存上限,肯定是会失败的。5、需要补充一点的是,从查询条件上假设ID字段为数字型,
    那么在该字段上建立的索引会比在NAME字段上建立索引更为快速,
    如果ID字段为字符型,那么在该字段上是否建立索引,都无法提高查询速度。
    因为如果ID字段为字符型,where id=1 将等同于 where to_number(id) = 5,
    由于存在隐式转换,所以ID字段落上的索引不会得到使用