论坛首页 Java企业应用论坛

一对多关系的数据表查询优化

浏览 7603 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2004-05-27  
数据库:oralce9i
两表:Company 8w数据量 53列;Product 30w数据行,36列
由第三方提供.

现要查询语句如下:
SELECT p.id,p.name,p.hscode,p.info,c.name,c.id
FROM Company c,Product p
WHERE p.cid=c.id and p.name like '%somekey%'

发现查询速度非常慢,在10秒以上,
我的分页暂时没有optimize,取RS后再定位absolute
现在我在索引上优化,分别建立了p.id_index.p.name_index
但是发现对这种查询不起作用,如果只是取Product一列信息是有用的.

请教这种join处理的索引应该如何优化,谢谢
   发表时间:2004-05-27  
如果你是在pruduct.cid与company.id建立了外联结,试试在pruduct.cid,company.id分别建立索引
0 请登录后投票
   发表时间:2004-05-28  
你试试下面的:
SELECT p.id,p.name,p.hscode,p.info,c.name,c.id
FROM Company c right join Product p
on c.id=p.id
WHERE p.name like '%somekey%'
0 请登录后投票
   发表时间:2004-05-28  
昨天忙了一天,因为原来对oracle特征不熟悉,
感觉真的收获不少,

调试性能有几点:
1 检查第三方数据来源的主外键设定,因为不是自己
  建的表,忘记检查存在了.
2 索引
3 用oracle featured sql :rownum
   构造快速取特定行记录,在此也看了很多网友
  包括robbin关于hibernate实现机理的文章,一并  感谢表示

最后感谢同事和网友的帮助,对Oracle的能力表示印象深刻
0 请登录后投票
   发表时间:2004-05-28  
可是,你那条语句的性能最终是如何解决的呢
0 请登录后投票
   发表时间:2004-05-28  
我讲的3点都是要的啊,哈哈
不完全是SQL的语法

那个SQL应该写select * from (select rownum r,columa,colub where rownum<2000) where r>1800;这种形式
0 请登录后投票
   发表时间:2004-05-28  
对不起,我还是有个问题要跟你探讨

(1)我觉得用rownum,这是个涉及的问题,也就是说尽可能在客户端的需求上限制查询返回的数量

(2)我最关心的是,你最开始的那条语句通过建索引,性能是否改善?最终,索引怎么建立的?是建在主外键列上吗
0 请登录后投票
   发表时间:2004-05-30  
主键本身就是索引+唯一,
外键建立好以后,再建立索引,
然后,对所有查询列建立索引,
这样比较合理
0 请登录后投票
   发表时间:2004-06-15  
WHERE p.cid=c.id and p.name like '%somekey%'

慢是因为当'%'在字符串前面时无法利用数据库的索引

跟其它无关,只要p.cid与c.id需要建上索引
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics