我想知道以下哪些内容在MySQL数据库中执行得更快。该表将有200-1000个条目。
SELECT id
from TABLE
order by id desc
limit 1
或
SELECT count(id)
from TABLE
故事是表格被缓存。因此,每次在高速缓存检索之前执行此查询,以通过比较先前的值来确定高速缓存数据是否无效。
因此,如果存在更便宜的查询,请告知我们。感谢。
答案 0 :(得分:2)
如果你
然后,由于不必访问表数据(计数存储在元数据中),第二个可以[更加勉强]运行。
否则,
同时禁止上述
<小时/> 如果你真的想问
SELECT .. LIMIT 1
vs SELECT MAX(id)..
,那么答案实际上是MySQL和大多数理智的DBMS都是一样的,无论是否有索引。
答案 1 :(得分:0)
我认为,第一个查询运行得更快,因为查询仅限于一行执行,在这种情况下200-1000可能无关紧要。
答案 2 :(得分:0)
正如评论中已经指出的那样,你的表太小了,实际上并不是你的解决方案。出于这个原因,应该使用select count(id)
,因为它表达了意图,不需要任何进一步的处理。
现在select count(id)
附带了另一个select count(*)
。这两个不是同义词。 select count(*)
将计算行数,并在select count(id)
计算列id的非空值数存在时使用缓存值。如果id列设置为非null,则可以使用缓存的行计数。
count(*)
和count(id)
之间的选择再次取决于您的意图。在一般情况下,count(*)
更好地描述了意图。
使用mysql时count(1)
实际上可能是count(*)
的同义词,但如果最终使用不同的RDBMS,解释可能会有所不同。
每种类型的计数的性能也取决于您使用的是MyISAM还是InnoDB。如果我理解正确的话,行计数会缓存在前者上,而不会缓存在后者上。
最后,您应该依赖查询计划和运行测试并测量它们的性能,而不是这些一般的ramblings。