SQL获取行数优化

SQL获取行数优化,sql,database-performance,Sql,Database Performance,可能重复: 我有大桌子,上面有长文本,比如电子邮件内容或新闻。还有我的问题 计算表行的性能是否有任何差异: SELECT COUNT(*) FROM table_name SELECT COUNT(t.id) FROM table_name as t 哪一个更好?或者后者将由查询优化器进行优化?有关于这方面的文件吗?它们是不同的 COUNT(*)将检索所有值(甚至NULL值计数)。 COUNT(t.id)不计算NULL值 就性能而言,它们是相同的(查询优化器是智能的) 查询计划看起来是

可能重复:

我有大桌子,上面有长文本,比如电子邮件内容或新闻。还有我的问题 计算表行的性能是否有任何差异:

SELECT COUNT(*) FROM table_name

SELECT COUNT(t.id) FROM table_name as t
哪一个更好?或者后者将由查询优化器进行优化?有关于这方面的文件吗?

它们是不同的

COUNT(*)
将检索所有值(甚至
NULL
值计数)。
COUNT(t.id)
不计算
NULL



就性能而言,它们是相同的(查询优化器是智能的)

查询计划看起来是一样的,但在测试中,使用*更快(略快)


但是,在指定列名时不考虑空值。

假设
id
是不可空的列(看起来像PK)。他们在任何体面的场合都应该是一样的DBMS@juergend-COUNT(*)和COUNT(1)是同义词。但是COUNT(id)有不同的行为。就性能而言,它们只在不可为null的列上绝对相同。如果列不可为null,那么QO可以选择一个更窄的索引,甚至不包含指定的列,或者(对于MySQL,不记得是哪个存储引擎)使用根本不需要表访问的缓存值。