in适合什么场合呢,如果后面的value list很少,而且字段上存在索引,甚至是主键,这个时候用in性能比较高,但是当value list达到一定的临界值的时候会导致All全表扫描
1.对于语句中包含in(GUID1, GUID2…)的情况, 如果GUID比较多, 先将GUID放入临时表, 且对临时表建立唯一聚集索引
in的方式,fn_Split1方法之前的文档有
SELECT DISTINCT
v.VouchGUID
FROM
dbo.s_Voucher v
WHERE
v.VouchGUID IN (
SELECT
Value
FROM
dbo.fn_Split1(
'7e1ea565-0f0b-4db0-97ca-efaa288270f1,205f1baa-0435-47f2-bb65-ff6e834b7f0e,5fe2d20e-2ae9-4493-ac42-4f3ced0a919b,2eb70d71-7cdd-4f40-b5d4-b1c9d33439d5,0f8f09d9-96ba-42a8-923c-587ee9a93eed,3ab0fea6-30b5-41ab-8b2f-0dff77d6f37e,851abfd9-7a3a-4905-8ee8-a6e45559c883,9b5600c2-f201-48c4-bbf4-054f3c107c29,484d84de-7a37-436f-96e2-3e04a606aca1,09c79bab-7248-4fd8-b7ff-03fc1ee6aa8e,cc19055b-0360-45df-b6a3-576e7b84020c',
','
)
);
临时表关联
SELECT
CAST(Value AS UNIQUEIDENTIFIER) AS VouchGUI
INTO
#TempVouchGUIDs
FROM
dbo.fn_Split1(
'7e1ea565-0f0b-4db0-97ca-efaa288270f1,205f1baa-0435-47f2-bb65-ff6e834b7f0e,5fe2d20e-2ae9-4493-ac42-4f3ced0a919b,2eb70d71-7cdd-4f40-b5d4-b1c9d33439d5,0f8f09d9-96ba-42a8-923c-587ee9a93eed,3ab0fea6-30b5-41ab-8b2f-0dff77d6f37e,851abfd9-7a3a-4905-8ee8-a6e45559c883,9b5600c2-f201-48c4-bbf4-054f3c107c29,484d84de-7a37-436f-96e2-3e04a606aca1,09c79bab-7248-4fd8-b7ff-03fc1ee6aa8e,cc19055b-0360-45df-b6a3-576e7b84020c',
','
) a;
SELECT DISTINCT
v.VouchGUID
FROM
dbo.s_Voucher v
INNER JOIN
#TempVouchGUIDs Temp
ON v.VouchGUID = Temp.VouchGUI;
DROP TABLE #TempVouchGUIDs;
测试id生成方法
List<Guid> listGuid=new List<Guid>();
for (var i = 0; i <= 10; i++)
{
listGuid.Add(Guid.NewGuid());
}
var guids = string.Join(",", listGuid);
Console.ReadKey();