2011-08-12 50 views
0

如果我們通過sql使用select查詢從代碼獲取數據,並且在sql視圖上執行相同的查詢,那麼從性能角度來看哪種方式更快。平均視圖的顯示數據更快,或者我們在表上運行的直接sql查詢更快地獲取數據?SQL性能結果

+0

都沒有。兩者都以最快的速度(通常每次運行同一時間)在sql核心執行,並且可以在SSMS中使用「執行計劃」並在「毫秒」內分解查詢所做的事情 - 我認爲視圖更慢,因爲它需要更新GUI,一旦結果存在本地內存中,以編程方式進行更新;填充數據集是即時的,無需任何事件更新。即使在數百兆字節... – ppumkin

回答

1

你不能回答這樣一個普遍問到的問題。意見可以更快,但不一定是。它高度依賴於您正在使用的DBMS,創建的視圖,已加載的數據量,創建的索引以及針對表/視圖運行的查詢。

+0

如果我說查詢很簡單,就像select * from customer where customer names like%A%。那麼哪個數據獲取速度更快。視圖或使用上述查詢的代碼? –

+0

兩者都必須執行全表掃描。但是,一些DBMS提供了一個名爲「實體化視圖」的特性。當您使用上述查詢創建實體化視圖時,可以預先計算結果集,因此在這樣的視圖上進行選擇會更快。 – ckruse

+0

如果您使用通配符作爲類似子句中的第一個字符,那麼您將不會獲得良好的性能。如果您正在使用這些類型的查詢,那麼它就是糟糕設計的一個指標。他們是一個SQL Antipattern。 – HLGEM

0

兩者都不是更快。一個視圖只是一個存儲的查詢,所以如果它們的結構相同,它們應該在相同的時間框架內執行。如果您查看普通SQL或視圖執行的執行計劃,如果兩者中的SQL都相同,則它們應該是相同的。

0

很多因素都會影響到這一點。該視圖是一個索引視圖嗎?它可能會更快。視圖是調用其他視圖來調用其他視圖的視圖嗎?它可能會比直接擊中表格慢得多(特別是如果視圖鏈長而複雜)。在查看性能時,特定的查詢和特定的硬件設置將決定哪一個更快。你需要嘗試兩種方式才能看到。