我只想知道哪一个是最快的。
我要做的就是检查表中是否存在数据。 我一直在使用“限制”,但在您看来,或者如果您有基础,哪一个检查数据是否存在最快。
示例:
限制1:
SELECT ID
FROM TABLE
WHERE ID=1 LIMIT 1;
存在:
SELECT EXISTS(
SELECT *
FROM TABLE
WHERE ID=1);
count(*):
SELECT (*)
FROM TABLE;
计数(ID):
SELECT (ID)
FROM TABLE;"
附加:我正在使用InnoDB。
答案 0 :(得分:13)
限制总是最快的,因为它迭代了表格的一行。
存在与限制几乎没有区别,因为您只需添加另一个选择语句,我们可以说它与第一个具有相同的效率。
Count将迭代所有表并计算结果。当您使用count()时,默认情况下,mysql会计算表的主键。我在大表中对count(id),count(),count(field)和count(1)进行了一些测试,没有太大的区别。在我看来,'count'将始终尝试计算索引,除非你计算的字段不是索引,但很多人说我们应该使用count(id)而不是使用count(*)。
在一张小桌子上,四种方式都可以正常工作。但是,如果你加入一些大桌子,数数将花费很长时间。
总而言之,使用的时间是 count(*)> count(id)>>存在>限强>
答案 1 :(得分:0)
我认为他们都很好;除了我会删除WHERE ID = 1
条款。如果您清空表并开始重新插入,则ID
1将不存在。只需LIMIT 1
即可。就个人而言,我不赞成exists
和count(*)
选项。我更喜欢count(ID)
,因为你通常会在ID
上有一个索引,所以我希望它能够相当快地运行。可以肯定的是,你必须给它们计时(在一张非常大的桌子上) - 我希望它们能够出现exists
,limit 1
,count(id)
,count(*)
之类的内容。最快到最慢。 (我对exists
有疑问 - 如果它实际上评估了整个SELECT *
它可能会更糟糕。