SQL性能优化之join临时表关联查询取代in

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();

猜你喜欢

转载自blog.csdn.net/q1923408717/article/details/113131143