我正在开发一个 C# 应用程序,它从 MS SQL 2008 或 2008 R2 数据库加载数据。该表看起来像这样:
ID | binary_data | Timestamp
我只需要获取最后一个条目和二进制数据。该表的条目是从另一个程序不规则添加的,所以我无法知道是否有新条目。 哪个版本更好(性能等),为什么?
//Always a query, which might not be needed
public void ProcessData()
{
byte[] data = "query code get latest binary data from db"
}
对比
//Always a smaller check-query, and sometimes two queries
public void ProcessData()
{
DateTime timestapm = "query code get latest timestamp from db"
if(timestamp > old_timestamp)
data = "query code get latest binary data from db"
}
binary_data 字段大小约为 30kB。函数“ProcessData”每分钟会调用几次,但有时可以每 1-2 秒调用一次。这只是具有大量线程/数据库访问的更大程序的一小部分,所以我想要“最轻”的解决方案。谢谢。
最佳答案
幸运的是,您可以同时拥有:
SELECT TOP 1 binary_data
FROM myTable
WHERE Timestamp > @last_timestamp
ORDER BY Timestamp DESC
如果没有比 @last_timestamp
更新的记录,则不会返回任何记录,因此不会发生数据传输(= 快速)。如果有新记录,则立即返回最新的二进制数据(=不需要第二次查询)。
关于c# - SQL - 更好的两个查询而不是一个大查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17565860/