|
|
原帖由 rollingpig 于 11-3-29 12:36 发表 ![]()
如果能用上=:N的条件,性能将会提高数百倍。
直接用,没那个胆,毕竟“正确性和完善程度”是很重要的,在题目内容中及有限的推理过程中,并不能得出 =:N的条件。可是,如果有一种方法,在SQL的内部就直接证明,的确存在5*N的摆法,那么,就可以理直气壮的使用上=:N的条件了。
这时候,灵感突然来了,如果我在SQL里嵌入一段,在求solution结果的运算变的很慢之前,就发现有存在5*N的摆法,不就解决了吗?
用rownum 来限制,应该可以在性能变糟之前就得到吧?
Tips: 特定的时候,使用rownum限定结果集,有助于提高性能,但是仅限于“只获取部分数据”
………………
经过尝试,发现N=2时,N*5出现在199, N=3,发生在1916, N=4发生在 17638。
而如果用了where rownum < :max_rows, 性能非常的好。
这时候,又有一个问题,怎么把这个:max_rows里写进去了,有两个写法,一是直接取最大,大家都按N=4的时候的50000来算,但是,就是当N=2/3是有点亏。
最后选择了Power(16,:N), 正好都cover. (其实 2*power(10,:N) 更合适).
最后部分既是亮点也是弱点,正如你现在自己说的“(其实 2*power(10,:N) 更合适)”
这个值合适不合适,到底取多少合适?其实是有点从答案倒推过程了 |
|