or A.Keyword Like '%英语%'
or A.Keyword='英语'--这个可以去掉,id需要建索引,其他字段没有关联无需索引,
影响速度的主要原因是order by,你可以用先把数据不排序读进内存(set 或 vector之类),然后再在内存中排序,这是最彻底的解决办法
or A.Keyword='英语'--这个可以去掉,id需要建索引,其他字段没有关联无需索引,
影响速度的主要原因是order by,你可以用先把数据不排序读进内存(set 或 vector之类),然后再在内存中排序,这是最彻底的解决办法
try:
create index idx_name on A(substr(apath,1,2));
From TableA A Inner Join Tableb B On A.Id=B.Id
Where rownum < 100
and SUBSTR(A.apath,1,2)='$-'
And (DBMS_LOB.INSTR(B.Content,'英语') > 0 or A.Keyword Like '%英语%' or A.Keyword='英语')
Order By CLICK Desc以上语句跟order by 应该没有太大关系。建议如下:select a.*,(select Content from b where a.id=b.id)
from a
where rownum<100
and apath like '$-%'
and keyword like '%英语%'
Order By CLICK Desc;
//其中apath 需要单独建立索引//另外根据你写的sql来看,显然你的关键字keyword列没有发挥作用,关键字列就是为了提高查迅速所提取出来的关键词汇,就是为了查询语句中不要用到like '%key%'这样的情况,而你用到的Like '%英语%' 这样的写法显然表示你的关键字没有提取好,如果关键字提取的是确定的一个,那么还可以按照下边的写法会更快:
select a.*,(select Content from b where a.id=b.id)
from a
where rownum<100
and apath like '$-%'
and keyword ='英语'
Order By CLICK Desc;
//其中建立索引:(keyword,apath)//你的TableA(id,keyword...)按照通常理解,应该是这么记录的
1 英语数学政治
2 物理化学
...
建议另外建立一个存放关键字的表c(id,keyword),数据这么存放
1 英语
1 数学
1 政治
2 物理
2 化学
并且在keyword上建立索引,这样做关键字查询时以次为主表,连接其它表选择出需要的数据来才是解决问题的正解