检查行是否存在,最有效的方法是什么?

时间:2017-08-05 21:28:38

标签: php mysql pdo

SQL查询/ P1 /

  1. SELECT EXISTS(SELECT /p2/ FROM table WHERE id = 1)
  2. SELECT /p2/ FROM table WHERE id = 1 LIMIT 1
  3. SQL SELECT / P2 /

    1. COUNT(id)
    2. id
    3. PHP PDO功能/ P3 /

      1. fetchColumn()
      2. rowCount()
      3. 从以下3个部分中,检查行是否存在的最佳方法是什么,无论是否具有检索数据的能力。

        可取:

        /查询/ SELECT id FROM table WHERE id = 1 LIMIT 1

        /功能/ rowCount()

        无可挽回

        /查询/ SELECT EXISTS(SELECT COUNT(id) FROM table WHERE id = 1)

        /功能/ fetchColumn()

        在您看来,最好的方法是什么?

1 个答案:

答案 0 :(得分:2)

best 我想你的意思是在MySQL服务器和客户端上消耗的资源最少。

就是这样:

      SELECT COUNT(*) count FROM table WHERE id=1

您获得一行一列结果集。如果该列为零,则找不到该行。如果列是1,则找到一行。如果列大于该列,则找到多行。

出于几个原因,这是一个很好的解决方案。

  1. COUNT(*)效率很高,尤其是在id被编入索引的情况下。
  2. 它在客户端软件中有一个简单的代码路径,因为它总是只返回一行。您不必冒边缘情况,例如没有行或多行。
  3. SQL就像你要做的事情一样清晰。这对下一个处理代码的人很有帮助。
  4. 如果添加到此查询,添加LIMIT 1将不会执行任何操作。它本身就是一行结果集。你可以添加它,但是你会让下一个看着你的代码的人想知道你想要做什么,并想知道你是否犯了某种错误。

    COUNT(*)计算与WHERE语句匹配的所有行。 COUNT(id)略慢,因为它计算所有行,除非它们的id值为空。它必须进行检查。出于这个原因,人们通常使用COUNT(*),除非他们有可能想要忽略空值。如果您在代码中添加了COUNT(id),则下一个处理代码的人将不得不花一些时间通过计算id而不是*来确定您是否有任何特殊意义。

    你可以使用;他们给出了相同的结果。