数据库字段类型查询效率和索引效率有关问题
数据库字段类型查询效率和索引效率问题
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;
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;