我现在有一张表,四列,前三列均为INT,第四列为VARCHAR,现在我想比较一下单列Int和双列Int,以及单列Char之间的查询效率
SQL语句   select * from tablename where PID=100;
          select * from tablename where ROW=10 and COL=10;
          select * from tablename where ISCHAR ='code';
请问,上述三种方法哪种效率最高?有没有实验分析以及相应的时间比较?
急等!!!!谢谢~~

解决方案 »

  1.   

    结果是一样的,100  10  10  code是一行的数据
    另外就是环境相同,硬软件环境相同,索引也一样,可以都不建索引,也可以单建PID列索引,或者建ROW和COL索引,就是在这种情况下,看谁的查询效率高
    我往一张表里存了45000条数据,测试了,前两个效率基本相同,但为什么第三个单查字符串和单查Int也差不多呢。
    此想法源自影像中的MORTON编码,我现在还一直在想,MORTON编码到底能不能提高效率?
      

  2.   


    你开启时间看运行时间就知道 以及看分析计划就明白
     set timing on
    set autotrace on 不过查询效率跟字段类型应该没什么影响 只是跟数据量以及索引 有关
      

  3.   

    嗯,我用SQL developer执行三种情况,得到的时间也都差不多,最多就差个一两毫秒,然后我就很诧异,数字查询竟然跟字符串查询一样快?
    你说的那个“分析计划”在哪啊?
      

  4.   

    如何查看执行计划:一、在线查看执行计划表  如果PLAN_TABLE表不存在,执行$ORACLE_HOME/rdbms/admin/utlxplan.sql创建plan_table表。  1.explain plan for select * from ......  2.select * from table(DBMS_XPLAN.Display);二、使用oracle第三方工具:  plsql developer(F5)

        Sql Tools (F9)  Toad (Ctrl+E)三、使用SQL*PLUS:  如果PLAN_TABLE表不存在,执行$ORACLE_HOME/rdbms/admin/utlxplan.sql创建plan_table表。  如果PLUSTRACE角色不存在,执行
      $ORACLE_HOME/sqlplus/admin/plustrce.sql  1.sqlplus / as sysdba
      set autotrace on;  关于Autotrace几个常用选项的说明:
      SET AUTOTRACE OFF ---------------- 不生成AUTOTRACE 报告,这是缺省模式
      SET AUTOTRACE ON EXPLAIN ------ AUTOTRACE只显示优化器执行路径报告
      SET AUTOTRACE ON STATISTICS -- 只显示执行统计信息
      SET AUTOTRACE ON ----------------- 包含执行计划和统计信息
    SET AUTOTRACE TRACEONLY ------ 同set autotrace on,但是不显示查询    2.执行sql