假设表“项目”(大约 1000 条记录)具有以下字段:
ItemID (smallint, primary key)
ItemHierarchyID (HierarchyID)
ItemName (varchar(max))
此查询(仅用于测试目的)大约需要 0 秒:
SELECT A.*
FROM Items A, Items B
WHERE A.ItemID = B.ItemID
(output: 1011 records)
相反,另一个需要大约25 秒:
SELECT A.*
FROM Items A, Items B
WHERE A.ItemHierarchyID.IsDescendantOf(B.ItemHierarchyID) = 1
(output: 1035 records)
我补充说,其中许多记录的 ItemHierarchyID = NULL。
为什么 IsDescendantOf 这么慢?