当前位置: 代码迷 >> 高性能数据库开发 >> 数据库字段类型查询效率和索引效率有关问题
  详细解决方案

数据库字段类型查询效率和索引效率有关问题

热度:121   发布时间:2016-05-11 10:02:13.0
数据库字段类型查询效率和索引效率问题
1.数据库表中有两列相同的内容数据,其中一列为数字类型,一列为字符类型。请问哪一种类型查询效率比较高?
注意存在以下两种情况:
1.1 当数字位数为1位时和为10位时的效率。
1.2 当字符类型char为定长时。

2.数据库中针对数字类型和char类型建立唯一索引,查询时是数字类型的快还是char类型的快?也是和上面的一样。

请高手指教

------解决方案--------------------
如果你用oracle 数据库可以建立sequence,这里是oracle内建的,跟索引关联很强,效率很高;对你说的问题,效率应该是一样;对系统来说,数字和字母就是表示 就像人的名字不同而已。
------解决方案--------------------
实际测试过,基本上无差别。
------解决方案--------------------
补充测试脚本:
--字符串索引和整数索引,从查询效率来看,基本无差别
--

create table lish_test_index
(
int_var  integer,
str_var  varchar2(36)
)

drop table lish_test_index;

declare
  int_temp integer;
  str_temp varchar2(36);

begin

  for i in 1..10000000 loop
    int_temp := 100000000000000000000000000000 + i;
    str_temp := '' 
------解决方案--------------------
 (100000000000000000000000000000 + i); 
    insert into lish_test_index values(int_temp,str_temp);
   
  end loop;
  
  commit;

end;

create index IDX_INT_VAR on LISH_TEST_INDEX (INT_VAR);
create index IDX_STR_VAR on LISH_TEST_INDEX (STR_VAR);

--整数操作
declare
  int_temp integer;
  str_temp varchar2(36);
  int_con_temp integer;
  int_random integer;
  
begin
  
  dbms_output.put_line('Int begin:' 
------解决方案--------------------
 CURRENT_TIMESTAMP);
  for i in 1..1000000 loop
    
    int_random := dbms_random.value(1,10000000); 
    
    int_con_temp := 100000000000000000000000000000 + int_random;
    
    select str_var,int_var 
      into str_temp, int_temp
      from lish_test_index
     where int_var= int_con_temp;
   
  end loop;
  dbms_output.put_line('Int end:' 
------解决方案--------------------
 CURRENT_TIMESTAMP);
 
end;

--字符串操作
declare
  int_temp integer;
  str_temp varchar2(36);
  str_con_temp varchar2(36);
  int_random integer;
  
begin
  
  dbms_output.put_line('Str begin:' 
------解决方案--------------------
 CURRENT_TIMESTAMP);
  for i in 1..1000000 loop
    
    int_random := dbms_random.value(1,10000000);    
  
    str_con_temp := '' 
------解决方案--------------------
 (100000000000000000000000000000 + int_random); 
    
    select str_var,int_var 
      into str_temp, int_temp
      from lish_test_index
     where str_var= str_con_temp;
   
  end loop;
  
  dbms_output.put_line('Str end:' 
------解决方案--------------------
 CURRENT_TIMESTAMP);
 
end;
  相关解决方案
本站暂不开放注册!
内测阶段只得通过邀请码进行注册!
 
  • 最近登录:Sat Nov 25 07:53:20 CST 2017
  • 最近登录:Sat Nov 25 07:53:20 CST 2017
  • 最近登录:Sat Nov 25 07:53:20 CST 2017
  • 最近登录:Sat Nov 25 07:53:20 CST 2017
  • 最近登录:Sat Nov 25 07:53:20 CST 2017