s_name表
id number(11) NOT NULL,
name nvarchar2(40) NOT NULL, /*名称*/
desc nvarchar2(255) NULL, /*描述*/
PRIMARY KEY (id)
b_name表
id number(11) not null,
name 名称 NVARCHAR2(100) /*名称*/
PRIMARY KEY (id)
s_name表记录:
id name desc
1 A A大类
2 B B大类
3 C C大类
4 A1 A小类
5 A2 A小类
6 C1 C小类
b_name表记录:
id name
1 A3465431
2 Aljiou
3 Bipoi08
4 B2egdfgdfg
5 C22222
按以上表,我现在要根据s_name的所有记录对b_name按类别统计
因统计中需用到like,所以小弟用了循环,先将s_name表读出来,再对b_name表进行循环查询。
如果b_name表有百万条记录,那查询要好几分钟时间
小弟在此求优化,希望可以使用group by或更好方法解决
解决立即给分,急!!!
id number(11) NOT NULL,
name nvarchar2(40) NOT NULL, /*名称*/
desc nvarchar2(255) NULL, /*描述*/
PRIMARY KEY (id)
b_name表
id number(11) not null,
name 名称 NVARCHAR2(100) /*名称*/
PRIMARY KEY (id)
s_name表记录:
id name desc
1 A A大类
2 B B大类
3 C C大类
4 A1 A小类
5 A2 A小类
6 C1 C小类
b_name表记录:
id name
1 A3465431
2 Aljiou
3 Bipoi08
4 B2egdfgdfg
5 C22222
按以上表,我现在要根据s_name的所有记录对b_name按类别统计
因统计中需用到like,所以小弟用了循环,先将s_name表读出来,再对b_name表进行循环查询。
如果b_name表有百万条记录,那查询要好几分钟时间
小弟在此求优化,希望可以使用group by或更好方法解决
解决立即给分,急!!!
select * from
(
select id,substring(name,1,1) as type ,name from b_name
) b
join s_name s on a.type = s.namewhere 你的条件建议你的b_name表改为:
ID typeId name 1 1 A3465431
其中typeId为s_name表中对应的类别ID。
select count(b.id),s.name from b_name b,s_name s where b.name like concat(s.name,'%') group by s.name;
但时间还是很慢,
b_name表有40多万条记录,s_name表有15条记录,每查一次b_name表就要12秒左右,整条语句的执行时间是12*15=180秒,跟循环差不多。
大家帮忙想想啊,还有什么方法,像二楼那种join的方法可以优化很多,但他那条sql语句不适合大小类一起统计啊。我忘了提出要求,在统计大类的时候要连小类一起统计,统计小类的时候才单独统计。上面那条group by语句的统计结果是对的.小弟已经想了一整天了,高手们帮帮啊,谢谢了