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

我试图找出表中是否存在一行。使用MySQL,这样的查询更好吗:

SELECT COUNT(*) AS total FROM table1 WHERE ...

并检查总数是否为非零,还是执行如下查询更好:

SELECT * FROM table1 WHERE ... LIMIT 1

检查是否返回了行?

在这两个查询中,WHERE子句都使用索引。

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

潇湘沐
浏览 642回答 3
3回答

白衣非少年

您也可以尝试使用SELECT EXISTS(SELECT * FROM table1 WHERE ...)每文献根据以下评论:SELECT EXISTS(SELECT 1 FROM table1 WHERE ...)

慕少森

我最近对这个问题做了一些研究。如果字段是文本字段,非唯一字段,则实现该字段的方式必须是不同的。我用文本字段做了一些测试。考虑到我们有一个包含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.00023889541625977SELECT EXISTS(SELECT 1 FROM test2 WHERE id ='321321' LIMIT 1)*0.00020313262939453(更快)

函数式编程

例子: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)
打开App,查看更多内容
随时随地看视频慕课网APP