SQL 语句中的条件 VS 后面代码中的条件

Conditions in SQL statement VS conditions later in code

提问人:Khalil Khalaf 提问时间:8/23/2017 最后编辑:CommunityKhalil Khalaf 更新时间:8/23/2017 访问量:46

问:

考虑一下这个有一些当天的记录:myTable

+-----+---------------------+---------------------+
| id  | start_date          | end_date            |
+-----+---------------------+---------------------+
| 1   | 2017-07-17 12:00:00 | 2017-07-17 14:00:00 |
| 2   | 2017-07-17 8:00:00  | 2017-07-17 11:00:00 |
| 3   | 2017-07-17 13:00:00 | 2017-07-17 15:00:00 |
+-----+---------------------+---------------------+

假设我愿意(其中 12->14 是目标)。get records that overlap 12:00:00 -> 14:00:00

实质上,对 (RecordStart <= TargetEnd) 和 (RecordEnd >= TargetStart) 有效的记录

我可以通过以下方法之一来做到这一点:

1- sql语句中的条件:

const myQuery = 
    "SELECT * FROM myTable " +
    "WHERE start_date <= '" + target_end_date +
    "' AND '" + target_start_date + "' <= end_date";

let filtered = DbConnection.query(myQuery)

2- 代码中的条件:

const myQuery =  "SELECT * FROM myTable";

let records = DbConnection.query(myQuery)

let filtered = [];
records.map((rec) => {
    if(Date.parse(rec.start_date) <= Date.parse(target_end_date) && Date.parse(target_start_date) <= Date.parse(rec.end_date) ) 
        filtered.push_back(rec)
})

我应该遵循哪种做法?

更一般地说,选择最佳实践是以案例为导向的?这是否取决于数据库有多大和/或结果有多大?或者有一些我仍然不知道的关于sql与code的知识?

作为一名程序员,我是否为每个用例构建了两种方法,然后进行测试以供选择?

编辑:

考虑到每个与处理/查询相关的事情都将发生在 API 端,那么(这两种方法的最终结果相同)将通过网络发送回客户端。filtered

javascript sql 语言无关 条件语句

评论

1赞 ScaisEdge 8/23/2017
始终是 SQL 中的过滤条件。在你选择的同时,你有过滤器,所以避免语言代码
0赞 Khalil Khalaf 8/23/2017
@scaisEdge我想知道更多,那么如果我有多个条件,我在 sql 中包含的越多越好?
0赞 mechalynx 8/23/2017
相关新闻: softwareengineering.stackexchange.com/questions/171024/...
0赞 ScaisEdge 8/23/2017
此外,如果您有多个条件并加入..另外,如果你有复杂的条件..最佳做法是这样的。曾经的sql..用于过滤结果 ..很少。。。但很少..可能会发生您需要代码,但是当SQL无法完成工作时。

答:

0赞 Sunil Singhal 8/23/2017 #1

利用 Sql 功能进行筛选将是: - 高性能 - 减少网络带宽使用 -维护 - 快速实施 等 毕竟数据库是用来存储数据和执行CRUD操作的

1赞 Dan Bracuk 8/23/2017 #2

使用 sql 筛选记录有两个原因。一是减少流经网络的数据量。第二种是尽量减少应用程序所需的 RAM 量。如果引入过多的数据,则可能会遇到堆空间问题。

1赞 Aaron Dietz 8/23/2017 #3

这里有两件事需要考虑:

  • 尽可能提取最小、最有效的结果集
  • 尽可能少地击中数据库

几乎总是,您希望专注于提取尽可能小、最有效的结果集。即。在 SQL 中执行筛选器。

只有在已需要将整个表拉入内存中,并且稍后将进行筛选以以不同的方式查看它时,才应在代码中进行筛选,而不是在 SQL 查询中进行筛选。