測試環境的WinCC設置為1秒1次變量記錄,查詢兩天的數據,共158039行,以下測試查詢內容相同。注意圖片右下角查詢時間和查詢行數。
查詢對比
從WinCC過程值歸檔數據庫中查詢出的變量是以列呈現的,一般還需再做二次查詢對數據進行轉換,把變量值變成二維表格。這里不對數據進行轉換,只把查詢的數據保存到臨時表變量再二次查詢,模擬實際使用的過程。
(1)用WinCC提供的存儲過程查詢,查詢的數據先保存在臨時表變量中,然后再從臨時表變量中查詢所有數據,耗時20秒。
(2)用WinCC建立的鏈接數據庫查詢,查詢的數據先保存在臨時表變量中,然后再從臨時表變量中查詢所有數據,耗時20秒。
(3)用WinCC建立的鏈接數據庫查詢,查詢的數據直接顯示,耗時14秒。
(4)用WinCC提供的OLEDBProvider查詢,查詢的數據直接顯示,耗時14秒。
(4)直接查詢SQL Server數據庫,該表是用上面方法查詢出數據后寫入其中建立的測試表,耗時1秒。
結論
序號 |
查詢方式 |
耗時(秒) |
1 |
存儲過程查詢,保存到表變量再顯示。 |
20 |
2 |
鏈接服務器查詢,保存到表變量再顯示。 |
20 |
3 |
鏈接服務器查詢,直接顯示。 |
14 |
4 |
WinCCOLEDBProvider查詢,直接顯示。 |
14 |
5 |
SQL Server表查詢。 |
1 |
從WinCC過程值歸檔數據庫中查詢158039行數據耗時14秒,每秒查詢到11288行數據,如果臨時保存到表變量需再耗費6秒,如果從SQL Server數據庫中查詢數據保存到表變量只需1秒。
存儲過程內所使用的接口正是鏈接服務器,而鏈接服務器也是通過WinCCOLEDBProvider創建,所以以上結果WinCC的存儲過程、鏈接服務器和WinCCOLEDBProvider的查詢速度一樣,但是都比查詢SQL Server表要慢許多。