本人项目主要是几个查询功能,提供导入号码查询功能!
我现在的做法是select .... from .... where ....in(xxx,xxx,xxx)
查询语句很复杂,但归纳起来就是上面的这样的形式现在的问题是,在in()中,条件多少未知,我本来以为也就几百个,测试了一下,速度也还过得去!(对查询时间没有要求,使用范围很小,只是几个人用的)当时也没在意!交付了,一开始也没发现问题,但是,现在用户导入的数据越来越多.多则上万!
我大致了解了一下,3000左右的数据还行(每个数据十几个字节),再多好像有问题,数据出不来!不知道怎么解决,希望大家给点意见!
我现在的做法是select .... from .... where ....in(xxx,xxx,xxx)
查询语句很复杂,但归纳起来就是上面的这样的形式现在的问题是,在in()中,条件多少未知,我本来以为也就几百个,测试了一下,速度也还过得去!(对查询时间没有要求,使用范围很小,只是几个人用的)当时也没在意!交付了,一开始也没发现问题,但是,现在用户导入的数据越来越多.多则上万!
我大致了解了一下,3000左右的数据还行(每个数据十几个字节),再多好像有问题,数据出不来!不知道怎么解决,希望大家给点意见!
sqlplus中最大单行长度为2499个;
in(n,....),其中list的最大列表数是1000,否则报ORA-01795 ;
解决大于1000的简单方法是把list的列表的数据insert into临时表,然后关联查询,如:
select ... from tableA a,tempTable t where a.id=t.id;
The limit on how long a SQL statement can be depends on many factors, including database configuration, disk space, and memory.
最好是构建中间表。