通过划分两个数字找到商数的最快方法

时间:2011-05-16 16:29:19

标签: mysql sql-server oracle teradata

我必须根据以下实现做一些逻辑。

我有一个高达36位的大数字,例如913695089923267549815145223638290430(由不同的应用程序随机生成)。我需要将它除以任何长度较小的数字,例如70368844197664;(由不同的应用程序随机生成)假设我得到商数为19956694.3256

对于我的代码,只有十进制前的商的最后一位数(即4)很重要。目的是检查商是偶数还是奇数,如果可能的话也是最后一位的值。

我不能使用简单的DB函数,如模数或除法,因为它非常耗时。有没有更快捷的有效方式?任何建议都将受到高度赞赏。

非常感谢你。

此致 Neeraj

1 个答案:

答案 0 :(得分:5)

你想要做的几乎就是“模运算”的定义。如果数据库中的内置算法不能足够快地进行计算,我不确定如何改进编写自己的数据库引擎或购买功能更强大的硬件。

问题真的是算术的速度,还是记录检索或索引?我的意思是,如果你说的是:

select ... whatever ... from table1 join table2 using (someid)
where (table1.q / table2.d) % 10 = 4

并且您没有函数(table1.q / table2.d)%10的索引,这将要求db读取每条记录,执行计算,然后选择那些给出正确答案的记录。您的问题可能不是算术,而是索引。