为了账号安全,请及时绑定邮箱和手机立即绑定

测试MySQL表中是否存在行的最佳方法

测试MySQL表中是否存在行的最佳方法

潇湘沐 2019-07-01 15:56:58
我试图找出表中是否存在一行。使用MySQL,这样的查询更好吗:SELECT COUNT(*) AS total FROM table1 WHERE ...并检查总数是否为非零,还是执行如下查询更好:SELECT * FROM table1 WHERE ... LIMIT 1检查是否返回了行?在这两个查询中,WHERE子句都使用索引。测试MySQL表中是否存在行的最佳方法
查看完整描述

3 回答

?
白衣非少年

TA贡献1155条经验 获得超0个赞

您也可以尝试使用

SELECT EXISTS(SELECT * FROM table1 WHERE ...)

文献

根据以下评论:

SELECT EXISTS(SELECT 1 FROM table1 WHERE ...)


查看完整回答
反对 回复 2019-07-01
?
慕少森

TA贡献2019条经验 获得超9个赞

我最近对这个问题做了一些研究。如果字段是文本字段,非唯一字段,则实现该字段的方式必须是不同的。

我用文本字段做了一些测试。考虑到我们有一个包含1M条目的表。37项等于“某物”:

  • SELECT * FROM test WHERE texte LIKE '%something%' LIMIT 1

    带着

    mysql_num_rows()

    :0.039061069488525

    (更快)

  • SELECT count(*) as count FROM test WHERE text LIKE '%something%

    :16.028197050095s。
  • SELECT EXISTS(SELECT 1 FROM test WHERE text LIKE '%something%')

    :0.87045907974243。
  • SELECT EXISTS(SELECT 1 FROM test WHERE text LIKE '%something%' LIMIT 1)

    :0.044898986816406 s。

但是现在,对于BIGINTPK字段,只有一个条目等于“321321”:

  • SELECT * FROM test2 WHERE id ='321321' LIMIT 1

    带着

    mysql_num_rows()

    :0.0089840888977051。
  • SELECT count(*) as count FROM test2 WHERE id ='321321'

    :0.00033879280090332 s。
  • SELECT EXISTS(SELECT 1 FROM test2 WHERE id ='321321')

    *0.00023889541625977
  • SELECT EXISTS(SELECT 1 FROM test2 WHERE id ='321321' LIMIT 1)

    *0.00020313262939453

    (更快)


查看完整回答
反对 回复 2019-07-01
?
函数式编程

TA贡献1807条经验 获得超9个赞

例子:


mysql> SELECT * FROM table_1;

+----+--------+

| id | col1   |

+----+--------+

|  1 | foo    |

|  2 | bar    |

|  3 | foobar |

+----+--------+

3 rows in set (0.00 sec)


mysql> SELECT EXISTS(SELECT 1 FROM table_1 WHERE id = 1);

+--------------------------------------------+

| EXISTS(SELECT 1 FROM table_1 WHERE id = 1) |

+--------------------------------------------+

|                                          1 |

+--------------------------------------------+

1 row in set (0.00 sec)


mysql> SELECT EXISTS(SELECT 1 FROM table_1 WHERE id = 9);

+--------------------------------------------+

| EXISTS(SELECT 1 FROM table_1 WHERE id = 9) |

+--------------------------------------------+

|                                          0 |

+--------------------------------------------+

1 row in set (0.00 sec)

使用别名:


mysql> SELECT EXISTS(SELECT 1 FROM table_1 WHERE id = 1) AS mycheck;

+---------+

| mycheck |

+---------+

|       1 |

+---------+

1 row in set (0.00 sec)


查看完整回答
反对 回复 2019-07-01
  • 3 回答
  • 0 关注
  • 641 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信