10万数据的排序,无索引,如何把时间缩短到半分钟以内?

tjxray 2012-01-05 10:07:38
select a.*,
(case when a.col1 like '%?%'
then ? else ?) as score1,
(case when a.col2 like '%?%'
then ? else ?) as score2,
(case when a.col3 like '%?%'
then ? else ?) as score3,
.....
.....
(case when a.col12 like '%?%'
then ? else ?) as score12

from A a
order by (score1+score2+.......score12)



?是动态传入的值,由页面输入。如何优化这条sql。我怎么都觉得没什么可能。但是需求还不能变,无奈啊。
是不是需要改变算法。求大神。
...全文
190 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
geniuswjt 2012-01-05
  • 打赏
  • 举报
回复
你这语句不可能吧,前面是a.*
那你后面没写group by,就算有group by,你是按a.*分组???[Quote=引用楼主 tjxray 的回复:]
select a.*,
(case when a.col1 like '%?%'
then ? else ?) as score1,
(case when a.col2 like '%?%'
then ? else ?) as score2,
(case when a.col3 like '%?%'
then ? else ?) as score3,
..……
[/Quote]
tjxray 2012-01-05
  • 打赏
  • 举报
回复
这种sql没法用索引!其实我从一开始就是觉得不可能实现的,10万条怎么也要20分钟吧。
可是技术这东西说不准,可能有些东西我不知道。各位高手帮忙想想看吧。
QWER_ASDFASDF 2012-01-05
  • 打赏
  • 举报
回复
有难度~!
刹怕雳 2012-01-05
  • 打赏
  • 举报
回复
无索引,like语句,有点坑爹啊,里面有BLOB字段么?我先想想!
争取今天 2012-01-05
  • 打赏
  • 举报
回复
不好优化,不知道你的需求是不是计分排序.如果是的话可以把你的表结构.和大体需求描述一下,看看能不能重新设计一下.
a120255857 2012-01-05
  • 打赏
  • 举报
回复
你直接order by decode()試試看
tjxray 2012-01-05
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wmg494005678 的回复:]
测试一下,查询的时候,去掉Case When,取出结果,在内存中对DataSet进行处理。
[/Quote]
内存中对DataSet进行处理。。是指在存储过程中吗?
tjxray 2012-01-05
  • 打赏
  • 举报
回复
sql没错啊,a.*和group by有什么关系?你搞错了吧。。。
wmg494005678 2012-01-05
  • 打赏
  • 举报
回复
测试一下,查询的时候,去掉Case When,取出结果,在内存中对DataSet进行处理。
geniuswjt 2012-01-05
  • 打赏
  • 举报
回复
死吧,光发疯不回答问题[Quote=引用 5 楼 tjxray 的回复:]
怎么办啊,没时间了,再做不出来我就去死了。
[/Quote]
tjxray 2012-01-05
  • 打赏
  • 举报
回复
怎么办啊,没时间了,再做不出来我就去死了。

3,499

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧