【问题标题】:SQL and search query calculated valueSQL 和搜索查询计算值
【发布时间】:2010-10-15 19:32:14
【问题描述】:

假设我们有一个包含列 (A,B,C) 的表格 我们希望根据从 C 列...和其他参数计算得出的条件来搜索此表

因为计算复杂,不能用sql查询表示... 我应该怎么办?在应用程序级别进行过滤?

【问题讨论】:

  • 选行的时候能不能不把复杂的计算结果和A、B、C一起存储,而不是计算?
  • 指定您的数据库,因为可以在 SQL 中完成相当复杂的事情(例如在 postgres 中,很容易将 python、perl、tcl 或 pl 与 SQL 混合使用)。

标签: sql sql-server filter


【解决方案1】:

这里没有灵丹妙药。

优点

您可以在数据库级别进行相当复杂的计算,在数据库级别执行此操作的优点是 RDBMS 更接近数据,并且通常通过 RDBMS 通过网络从磁盘来回传输数据到应用程序比在 RDBMS(其中执行 SQL)中进行计算并仅将结果发送到应用程序更昂贵。

另一个优点是集中逻辑使系统更易于维护,但是...

缺点

...根据您选择的数据库,您可能无法在 RDBMS 层中使用多种编程语言,因此对于更复杂的事情,在某些过程 SQL 变体中编码您的任务可能会变得非常尴尬。

不在 RDBMS 级别执行此操作的其他原因是,如果计算是资源密集型的(cpu、内存;想想 O(n!) 问题等),并且输出的大小与输入相当。在这种情况下,将数据传送到应用程序端可能对减轻数据库服务器资源很有意义(从某种意义上说,您是在分配计算任务;但是,如果您的应用程序服务器与数据库服务器位于相同的硬件上,则您可能一无所获,除非您可以将其一直推送到客户端;查看三层和多层架构)。

【讨论】:

【解决方案2】:

另一种方法是在数据库上创建一个函数/存储过程,为您进行数学运算,然后在查询的 where 子句中调用它

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-06
    相关资源
    最近更新 更多