我想知道,这两个查询之间是否存在性能差异,检查是否存在记录。

select count(1) from table where id = 1;


select id from table where id = 1;

最佳答案

我认为这两个查询之间不会有太大的区别:区别是在第二种情况下选择一个字段(它是索引的一部分),在第一种情况下计算一行。。。没什么区别。
不过,出于好奇,我在我电脑上的一个数据库上做了一个非常快速的查询基准——注意post表中只有大约7行,所以它可能没有那么接近实际情况,但是因为id上有一个PK,这意味着一个索引。。。。
我得到的是:

mysql> select benchmark(10000000000, 'select sql_no_cache id from post where id = 1');
+-------------------------------------------------------------------------+
| benchmark(10000000000, 'select sql_no_cache id from post where id = 1') |
+-------------------------------------------------------------------------+
|                                                                       0 |
+-------------------------------------------------------------------------+
1 row in set (1 min 0,25 sec)

mysql> select benchmark(10000000000, 'select sql_no_cache count(1) from post where id = 1');
+-------------------------------------------------------------------------------+
| benchmark(10000000000, 'select sql_no_cache count(1) from post where id = 1') |
+-------------------------------------------------------------------------------+
|                                                                             0 |
+-------------------------------------------------------------------------------+
1 row in set (1 min 0,23 sec)

所以,看起来真的没那么大区别^^

10-08 20:19