15

我只想知道哪个最快。

我想要做的只是检查表上是否存在数据。我大部分时间都在使用“LIMIT”,但在您看来,或者如果您有依据,哪一个是检查数据是否存在的最快方法。

例子:

限制1:

SELECT ID 
       FROM TABLE 
       WHERE ID=1 LIMIT 1;

存在:

SELECT EXISTS(
              SELECT * 
              FROM TABLE 
              WHERE ID=1);

数数(*):

SELECT (*) 
FROM TABLE;

计数(ID):

SELECT (ID) 
FROM TABLE;" 

附加:我正在使用 InnoDB。

4

2 回答 2

21

限制总是最快的,因为它会迭代表格的一行。

Exists 和 Limit 差别不大,因为你只是添加了另一个 select 语句,可以说它的效率与第一个相同。

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

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

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

于 2013-11-15T10:20:50.153 回答
0

我认为他们都很好;除了我会删除这些WHERE ID = 1条款。如果您清除表并开始重新插入,则ID1 将不存在。只是LIMIT 1会做的伎俩。我个人不赞成existsandcount(*)选项。我宁愿count(ID)那样,因为你通常会有一个索引,ID所以我希望它运行得相当快。可以肯定的是,您必须为它们计时(在一张非常大的桌子上)-我希望它们从最快到最慢会出现类似exists, limit 1,count(id)的结果。count(*)(我对此表示怀疑exists- 如果它真的评估了整体SELECT *,它可能会出现最差的情况)。

于 2013-11-15T09:34:25.423 回答