2011-01-26 96 views
0

我有這樣的腳本: -如何改進sql server 2005的這個transact-sql腳本?

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 

table_01結構: -

column_01 int (primary key) 
column_02 bit 
datetimestamp datetime 

我想實現: -

  1. column_01
  2. 的總數的第一條記錄column_01(基於哪裏條件)
  3. 總數o f column_02(根據條件)
  4. 按datetimestamp排序,但如果column_02爲true,則該記錄 應該位於頂部。這就是爲什麼我 上午使用order by子句。

這個查詢是做我想做的事情,但我有一個感覺,有很大的範圍來改善查詢。那麼,如何在性能和最佳實踐方面改進此查詢?由於

+0

多大表? – Andrew 2011-01-26 19:38:22

+0

什麼是操作系統狀態? – Andrew 2011-01-26 19:38:47

回答

1

你能避免使用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