2016年11月10日 星期四

Delete 很久,原來是foreign key搞的鬼.


有個Table,有Primary Key,這個Table約有2仟多萬筆資料.
以Primary Key為where條件,去Select資料,速度很快...
但同樣以Primary Key為條件,去Delete卻非常的久.

查看執行計畫,發現除了這個Table本身之外,還有其它的Table有table-scan或index-scan.
剛開始有點奇怪,Delete怎麼會去scan其它的Table!?
後來才發現這個table有被其它Table reference到,
也就是這個Table的Primary Key,是其它table的Froeign key.

所以當Delete的時候,系統會去它的外鍵Table檢查是否符合Foreign key的限制。

解決方法:
1. exec sp_fkeys @pktable_name = N'your_table_name'     ,查詢這個Table的Foreign keys
2. 外鍵Table的Foreign key,建立index,加快外鍵的搜尋速度.

沒有留言:

張貼留言