提问人:Khalil Khalaf 提问时间:8/23/2017 最后编辑:CommunityKhalil Khalaf 更新时间:8/23/2017 访问量:46
SQL 语句中的条件 VS 后面代码中的条件
Conditions in SQL statement VS conditions later in code
问:
考虑一下这个有一些当天的记录: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
答:
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 查询中进行筛选。
评论