浏览 7603 次
锁定老帖子 主题:一对多关系的数据表查询优化
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2004-05-27
两表: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处理的索引应该如何优化,谢谢 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2004-05-27
如果你是在pruduct.cid与company.id建立了外联结,试试在pruduct.cid,company.id分别建立索引
|
|
返回顶楼 | |
发表时间: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%' |
|
返回顶楼 | |
发表时间:2004-05-28
昨天忙了一天,因为原来对oracle特征不熟悉,
感觉真的收获不少, 调试性能有几点: 1 检查第三方数据来源的主外键设定,因为不是自己 建的表,忘记检查存在了. 2 索引 3 用oracle featured sql :rownum 构造快速取特定行记录,在此也看了很多网友 包括robbin关于hibernate实现机理的文章,一并 感谢表示 最后感谢同事和网友的帮助,对Oracle的能力表示印象深刻 |
|
返回顶楼 | |
发表时间:2004-05-28
可是,你那条语句的性能最终是如何解决的呢
|
|
返回顶楼 | |
发表时间:2004-05-28
我讲的3点都是要的啊,哈哈
不完全是SQL的语法 那个SQL应该写select * from (select rownum r,columa,colub where rownum<2000) where r>1800;这种形式 |
|
返回顶楼 | |
发表时间:2004-05-28
对不起,我还是有个问题要跟你探讨
(1)我觉得用rownum,这是个涉及的问题,也就是说尽可能在客户端的需求上限制查询返回的数量 (2)我最关心的是,你最开始的那条语句通过建索引,性能是否改善?最终,索引怎么建立的?是建在主外键列上吗 |
|
返回顶楼 | |
发表时间:2004-05-30
主键本身就是索引+唯一,
外键建立好以后,再建立索引, 然后,对所有查询列建立索引, 这样比较合理 |
|
返回顶楼 | |
发表时间:2004-06-15
WHERE p.cid=c.id and p.name like '%somekey%'
慢是因为当'%'在字符串前面时无法利用数据库的索引 跟其它无关,只要p.cid与c.id需要建上索引 |
|
返回顶楼 | |