有一个数据表web_data数据超过>100万,其中有字段devicecode为 varchar2型
在PL/SQL中测试
查找devicecode为带引号的某值时,
select * from web_data where devicecode='211011648'
所需时间为 0.125s如果值不带引号
select * from web_data where devicecode=211011648
所需时间为 9.359s1、请教高人解释二者的区别
2、如果需要建索引,该如何建,上面的测试结果已经根据 devicecode 建立了索引
3、使用 Hibernate 的 HQL 语句查询速度与不带引号近似,请教 HQL 是否使用不带引号的 SQL 语句进行查询?如何提高其效率?

解决方案 »

  1.   

    devicecode=211011648
    虽然可以查询出正确结果,但是因为devicecode是varchar2型的,
    如果211011648不加引号,数据库还得给你隐式转换一下。
    而且,即使你建立了索引,不加引号的时候,索引不会发挥它的优势
      

  2.   

    ls正解,补充一下这种情况(引号可加可不加)也就在varchar2列是纯数字时可以,否则会报ORA-00904: XXX 标识符无效 错误SQL> ed
    已写入 file afiedt.buf  1* create table test(col  varchar2(10))
    SQL> /表已创建。SQL> insert into test values(1);已创建 1 行。SQL> insert into test values('2');已创建 1 行。SQL> select * from test;COL
    ----------
    1
    2SQL> select * from test where col=1;COL
    ----------
    1SQL> select * from test where col = 2;COL
    ----------
    2SQL> ed
    已写入 file afiedt.buf  1* insert into test values('a1')
    SQL> /已创建 1 行。SQL> select * from test where col=a1;
    select * from test where col=a1
                                 *
    第 1 行出现错误:
    ORA-00904: "A1": 标识符无效
    SQL> select * from test where col='a1';COL
    ----------
    a1SQL>