Sql-Server

表值函式 VS 儲存過程

  • August 4, 2017

有一個功能:

  • 僅返回 1 行
  • 只有1個參數
  • 在不同的表上有多個連接,每個只返回一個標量值
  • 每次登錄 Web 應用程序時只呼叫一次

它目前是用 c# linq-to-sql 編寫的,執行需要 150-300 毫秒。

使用非常簡單的語句在 SQL 中重寫後SELECT,執行需要 30ms。

現在我想將此選擇包含在數據庫函式中,這樣做的最佳(最快執行)方法是什麼?

  1. 製作一個視圖,並在每次通話時執行類似的操作 select * from viewXX where id=123
  2. 做一個儲存過程
  3. 做一個表值函式

SSMS

在這種情況下我可以利用任何技巧嗎?

這是查詢的範例

declare @id int=162;
select top 1 i.id, i.name, itd.description,
(select top 1 case when count(*)>0 then '1' else '0' end from category where category_desc=itd.description) "HasCategory",
(select top 1 number from wheels where wheel_item_id=i.id) "WheelCount"
from items i left items_desc itd on i.id=itd.itemid where i.id=@id

如果數據不經常更改,請將快速執行的 SELECT 打包為視圖並在其上定義索引

索引視圖帶有一些限制,這些限制最低限度地限制了未來更改的靈活性。然而,沒有什麼是非常糟糕的。

如果數據經常更改,並且更新對性能至關重要,那麼維護視圖的額外時間可能是一個問題,但與任何其他索引一樣。

引用自:https://dba.stackexchange.com/questions/182600