此陈述是真还是假
这些查询的表现
SELECT * FROM table;
UPDATE table SET field = 1;
SELECT COUNT(*) FROM table;
相同
或者是否曾经存在一个人的表现与另一个人的表现大不相同的情况?
答案 0 :(得分:4)
当你说“表现”时,你的意思是“执行它们需要多长时间”?
所有这三个查询都做了完全不同的事情。因此,可以合理地得出结论,所有这三个都需要不同的时间来完成。
最重要的是,你为什么问这个问题?你想解决什么?我有一种不好的感觉,你问这个问题,你走错了路。
答案 1 :(得分:3)
涉及不同的资源类型:
问题中的UPDATE
查询最难:它会导致所有磁盘页面被提取,放入缓冲区,变成 new 缓冲区并写回磁盘。在正常情况下,它还会导致其他进程被锁定,因此会产生争用,甚至会产生缓冲压力。
SELECT *
查询也需要所有页面;它需要将它们 all 转换/格式化为前端格式并将它们发送回前端。
SELECT COUNT(*)
是所有资源中最便宜的。在最糟糕的情况下, all 必须提取磁盘页面。如果存在索引,则需要更少的磁盘I / O和缓冲区。 CPU成本仍然可以忽略(恕我直言)和"终端"输出是边际的。
答案 2 :(得分:2)
我在这里有一个大的(授予索引的)表,这就是我找到的
从X中选择*(限制为前100,000条记录)(12.5秒)
从X中选择count(*)(返回数百万条记录)(15.57秒)
索引表的更新速度非常快(不到一秒)
答案 3 :(得分:1)
所有三个查询都做了截然不同的事情。
它们各自都有自己的性能特征,无法直接比较。
你能澄清一下你试图调查的内容吗?
答案 4 :(得分:0)
SELECT和UPDATE应该大致相同(但它们可能很容易变化,这取决于数据库)。 COUNT(*)在某个级别缓存在许多数据库中,因此查询可以很容易地为O(1)。当然,UPDATE的延迟实现也可能是O(1),但我不知道当前有人这样做。
tl; dr:“False”或“it depends”。