有一个数据表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 语句进行查询?如何提高其效率?
在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 语句进行查询?如何提高其效率?
虽然可以查询出正确结果,但是因为devicecode是varchar2型的,
如果211011648不加引号,数据库还得给你隐式转换一下。
而且,即使你建立了索引,不加引号的时候,索引不会发挥它的优势
已写入 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>