MySQL中的限制与存在vs计数(*)与计数(id)

Ech*_*sen 9 php mysql sql database database-design

我只是想知道哪一个是最快的.

我要做的是只检查表中是否存在数据.我一直在使用"限制",但在您看来,或者如果您有基础,哪一个检查数据是否存在最快.

例:

限制1:

SELECT ID 
       FROM TABLE 
       WHERE ID=1 LIMIT 1;
Run Code Online (Sandbox Code Playgroud)

存在:

SELECT EXISTS(
              SELECT * 
              FROM TABLE 
              WHERE ID=1);
Run Code Online (Sandbox Code Playgroud)

计数(*):

SELECT (*) 
FROM TABLE;
Run Code Online (Sandbox Code Playgroud)

计数(ID):

SELECT (ID) 
FROM TABLE;" 
Run Code Online (Sandbox Code Playgroud)

另外:我正在使用InnoDB.

小智 14

限制始终是最快的,因为它迭代表的一行.

存在与Limit几乎没有区别,因为您只需添加另一个select语句,我们可以说它具有与第一个相同的效率.

Count将迭代所有表并计算结果.当您使用count()时,默认情况下,mysql会计算表的主键.我在大表中完成了count(id),count(),count(field)和count(1)的一些测试,没有太大的区别.在我看来,'count'总是会尝试计算索引,除非你计算的字段不是索引,但很多人说我们应该使用count(id)而不是count(*).

在一张小桌子上,四种方式都可以正常工作.但是,如果你加入一些大桌子,数数将花费很长时间.

总而言之,使用的时间是count(*)> count(id)>> exists> limit