none
判断一个数据在数据表中是否存在的性能最快的方式是用count函数统计是否为0,还是用判断查询结果是否为null? RRS feed

  • 问题

  • 用count函数统计是否为0,用判断查询结果是否为null。这两种方式用来判断数据表中是否存在数据中最快的方式是哪个?
    • 已编辑 Trian555 2019年1月27日 4:31
    2019年1月27日 4:28

答案

  • 这2个方式应该差不多(当都没有记录的时候)

    你可以将2个sql一起执行,看以下查询计划;(对比对比)


    family as water

    • 已标记为答案 Trian555 2019年1月28日 7:08
    2019年1月28日 0:19
  • 标记的做法是 IF EXISTS(SELECT ....) SELECT 1

    EXISTS 在检测到有满足条件的数据时停止

    SELECT COUNT 要求扫描所有满足条件的

    判断 结果是否为 NULL 同样是要包含所有满足条件的,并且这个还要额外包含 SELECT 列表指定的字段

    所以通常来说,EXISTS最快,COUNT次之,判断结果为 NULL 最慢,但实际情况来说,三者的执行分做的处理不一样,查询优化器所选择的执行计划可能会不一样,而执行计划是通过成本评估得到的,并不是最准确 的,所以可能选择的执行计划并不是最小成本的,这样导致的结果是实际执行的性能,并不一定是理论上的结果

    • 已标记为答案 Trian555 2019年1月28日 7:08
    2019年1月28日 1:15

全部回复

  • 这2个方式应该差不多(当都没有记录的时候)

    你可以将2个sql一起执行,看以下查询计划;(对比对比)


    family as water

    • 已标记为答案 Trian555 2019年1月28日 7:08
    2019年1月28日 0:19
  • 标记的做法是 IF EXISTS(SELECT ....) SELECT 1

    EXISTS 在检测到有满足条件的数据时停止

    SELECT COUNT 要求扫描所有满足条件的

    判断 结果是否为 NULL 同样是要包含所有满足条件的,并且这个还要额外包含 SELECT 列表指定的字段

    所以通常来说,EXISTS最快,COUNT次之,判断结果为 NULL 最慢,但实际情况来说,三者的执行分做的处理不一样,查询优化器所选择的执行计划可能会不一样,而执行计划是通过成本评估得到的,并不是最准确 的,所以可能选择的执行计划并不是最小成本的,这样导致的结果是实际执行的性能,并不一定是理论上的结果

    • 已标记为答案 Trian555 2019年1月28日 7:08
    2019年1月28日 1:15