編程最佳化雜談(一)

來源:互聯網
上載者:User
編程|最佳化 1. 在SQL中, 如果選擇某欄位不為空白的記錄有兩種寫法
where columnExample <> ''
或者是
where columnExample is not null

經測試, 後者比前者要快好幾倍(columnExample經過索引)

2. 在ASP中, 使用GetRows與不使用GetRows而直接用Record來迴圈調用, 兩者其實有所差別, 下面是測試
調用記錄數: 484

使用GetRows, 然後用數組來顯示, 發現單花在GetRows的運算上花了約620毫秒. 總共花了711毫秒

直接用RecordSet來迴圈調用, 總共花了931毫秒

所以建議大家使用GetRows, 特別是要顯示很多的返回記錄時, 但是它會佔用一部分臨時記憶體.

在直接使用RecordSet時, 大部分時間是花費在遊標的移動上, 大概佔了90%以上

3. 關於SQL中Count的想法

近日我對一大型資料庫進行編程, 發現我的一段程式的無論怎麼最佳化資料庫, 怎麼最佳化來源程式, 執行完畢至少需要
600毫秒以上, 而別一段只需要100多毫秒. 下面是兩段代碼的條件約束(AgentID已經索引):

1. where AgentID = 0 花了600多毫秒
2. where AgentID > 0 只要100多毫秒

真的是很奇怪, 我開始了尋找花費時間的根源, 一忽兒, 我就找到了原來是Count函數, 它花了將近500毫秒來進行
記錄總數統計, 對資料庫的AgentID的值進行分析, 又發現AgentID的98%的值都是0, 看來符合的記錄越多, Count
進行的時間就會越長.
後來我想想, 不知SQL是否會自動進行反計算, 也就是它先計算不符合的條數, 然後計算符合的而返:
1. where AgentID < 1 因為AgentID最不值是0, 所以用此條件也一樣
最後的時間花費仍是600多毫秒, 沒有任何必進.

所以只有一個解決方案, 那就是手動進行, 如果記錄總數已經知, 則只需要計算不合格記錄, 然後 總數減
去不符記錄即可得到尋找記錄的總數目.

下面是幾個Count進行的時間測試:

Count(*) 無條件 返回說共有記錄145539, 費時剛好100毫秒

count(*) where name is not Null and Agent = 0 返回說記錄有145530, 費時431-441毫秒
(name is not null去掉的後只需要執行時間110)

Count(*) where name is not Null 返回記錄共有145539, 費時100-110毫秒

以上的測試AgentID都是允許Null值的情況



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。