如何改进sql server 2005的此transact-sql脚本?

如何改进sql server 2005的此transact-sql脚本?,sql,sql-server-2005,tsql,Sql,Sql Server 2005,Tsql,我有以下脚本:- SELECT TOP 1 column_01, COUNT(column_01) OVER(), (SELECT TOP 1 COUNT(column_02) FROM table_01 WHERE status = 1 and Column_02 = 1) FROM table_01 WHERE status = 1 ORDER BY column_02 desc, datetimestamp asc 表01结构:- colum

我有以下脚本:-

SELECT TOP 1
    column_01, 
    COUNT(column_01) OVER(),
    (SELECT TOP 1 COUNT(column_02) FROM table_01 WHERE status = 1 and Column_02 = 1)
FROM 
    table_01
WHERE 
    status = 1
ORDER BY column_02 desc, datetimestamp asc
表01结构:-

column_01 int (primary key)
column_02 bit 
datetimestamp datetime
我正在努力实现的目标:-

  • _01列的第一条记录
  • 列_01的总计数(基于where条件)
  • 列_02的总计数(基于where条件)
  • 按日期时间戳排序,但如果列_02为真,则该记录 应该排在首位。这就是为什么我 我使用ORDERBY子句

  • 这个查询正在做我想做的事情,但我感觉有很多改进查询的余地。那么,如何在性能和最佳实践方面改进此查询?谢谢

    您可以使用下面给出的SUM避免内联查询:

    SELECT TOP 1
            column_01, 
            COUNT(column_01) OVER(),
        SUM(CASE WHEN column_02=1 THEN 1 ELSE 0 END) OVER()
        FROM 
            table_01
        WHERE 
            status = 1
        ORDER BY column_02 desc, datetimestamp asc
    

    @安德鲁:目前生产表有超过30万条记录,每天都在增长……你说的“类型os状态”是什么意思?我一直认为一个简单的案例比同等的搜索案例要快。如果这是真的,那么对于300K+行来说,这可能有点大。我不是在唠叨,事实上我想为自己澄清这件事。