sql执行效率的问题

[复制链接]
查看11 | 回复6 | 2006-9-7 17:01:08 | 显示全部楼层 |阅读模式
现在有个表记录400万左右
需要做一个带两三个条件的查询 但是效率比较低 想求助有没有方法在sql语句上来提高效率呢
ps 对这个表 只有查询的权限 其他对表的操作都不行 如加索引等
回复

使用道具 举报

千问 | 2006-9-7 17:01:08 | 显示全部楼层
给出表结构和你的需求。
回复

使用道具 举报

千问 | 2006-9-7 17:01:08 | 显示全部楼层
如果查询条件是确定的,那么速度没有问题
当然索引是必须的。不能说不可以加索引
可以考虑复合索引,关键是看你的需求
回复

使用道具 举报

千问 | 2006-9-7 17:01:08 | 显示全部楼层
是这样的
这个表是mis的 我们是第三方开发商 他们只给我们查询的权限 其他的都做不了 只能是建议拉
他们在id上建立了唯一索引 在card上建立了普通索引
表结构大概是这样的id,card,type,oper
根据card type,oper找出max的id
语句 select max(id) from lsb where card =a and oper =b and (type=1 or type =2)
想请教下在sql上有办法让它效率高些吗
如果不行的话 索引该怎么加呢
回复

使用道具 举报

千问 | 2006-9-7 17:01:08 | 显示全部楼层
card type,oper 建立联合索引试验一下
回复

使用道具 举报

千问 | 2006-9-7 17:01:08 | 显示全部楼层
能看到执行计划吗?
是否有用上card上的索引?card的值是否重复很多?
如果card的重复值很少可以考虑用 hint强制使用card 的索引来试试(这时不要单纯看执行计划的cost,而要看实际的执行时间是否有改进)
另外: 你这个oracle的版本是多少?
回复

使用道具 举报

千问 | 2006-9-7 17:01:08 | 显示全部楼层
原帖由 winningnick 于 2007-11-20 15:54 发表
如果card的重复值很少可以考虑用 hint强制使用card 的索引来试试(这时不要单纯看执行计划的cost,而要看实际的执行时间是否有改进)
另 ...

按理说如果card重复值很少的话(就是说selectivity较好)那优化器应该会使用索引的啊。不过即使使用索引,也要看看card列的数据分布怎么样。考虑在where子句中其它predicate涉及到的列上面建索引可以加快查询速度
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行