c# - SQL - 更好的两个查询而不是一个大查询

标签 c# sql sql-server database performance

我正在开发一个 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/

相关文章:

sql-server - TSQL游标如何检查是否已经声明并因此释放

c# - 如何在 MAUI 应用程序中创建自定义 TabBar?

c# - 我如何比较相同泛型类型的两个值?

c# - 主对象和嵌套对象中的Elastic Search 2.0搜索查询

mysql - 复制表时关键主要错误的重复条目

sql - 在 SQL Server 2000 中连接结果集中的列

sql - 如何在不使用触发器的情况下创建自动更新的 postgres 时间戳列

c# - SQL Server 2012 - 批量插入错误 - 此操作与此事务上的另一个挂起操作冲突

C#:如何在激活 TurboBoost 时获取 Intel i 系列 CPU 的当前时钟速度

sql-server - 是什么不断清除我的 SQL Server 计划缓存?