300万条记录 count(*) 和 count(字段名)比较
环境:sql2005
数据量:300万
机器环境
P4 3.0双核 1G内存
1. 执行语句
select count(*) from testing
select count(id) from testing
select count(name) from testing
2. 没有 索引的情况下
传说中的count(1)性能最差这里没有列出来。
Sql2005中count(*) 性能最高,它会自动的寻找最快的索引。这里给大家一个参考
在数据量过百万时尽量不要使用没有做索引的COUNT()函数来检索数据总数,性能消耗分成大,我将3条语句执行了2遍数据库内存用到300多M。
解决方案:添加索引
3. 为表主键id创建索引后的执行效果如下:
从以上数据可以看出 count(*) 比count(id)扫满一点基本上可以忽略这个就是我上面所讲到的count(*)会自动搜索最开的索引区查询,我们在不知道最快索引时可以使用它是最佳方案,反观count(name)由于name没有加索引所以检索的时间依然很长。
从数据中我们发现第一次执行的时间稍比第二次长点那是因为SQL2005缓存在作怪,如果数据没有任何变动sql会自己到缓存中夺取数据。
总结:
a) 大数据量是使用count函数时需要使用索引来提高性能
b) 在不清楚表中数据最快的索引时什么的时候使用count(*)比较好
c) 在检索的数据没有变更时数据库默认检索缓存中的数据。
分享到:
相关推荐
在SQL语言中,`LEFT JOIN` 和 `COUNT` 是两种非常重要的操作,它们在数据库查询中扮演着关键角色。在这个问题中,我们看到一个数据表 `TPL_WORD1`,它包含字段 `Wordid`(主键)、`idFuid`(上一级节点ID)和 `Name`...
### SQL语句参考及记录集对象详解 #### 一、SQL语句参考 ##### 1. 基础查询 - **全表选择**: `SELECT * FROM 表名 WHERE 条件 ORDER BY 排序字段` - 示例:`SELECT * FROM 表名 WHERE 字段 = '值' ORDER BY 字段...
在SQL Server中,`SELECT COUNT(*)` 和 `COUNT(1)` 是两种常见的聚合函数,用于统计表中的行数。虽然在大多数情况下它们的结果相同,但它们的执行方式和背后的原理存在细微差别,这也是数据库优化中常常讨论的话题。...
- **2.3.1 统计字段值的数目**:COUNT()函数。 - **2.3.2 计算字段的平均值**:AVG()函数。 - **2.3.3 计算字段值的和**:SUM()函数。 - **2.3.4 返回最大值或最小值**:MAX()和MIN()函数。 **2.4 其它常用的SQL...
SQL(Structured Query Language)是用于管理和处理关系数据库的标准语言,这里我们将探讨一些常见的SQL语句及其用途。 1. **选择不重复的记录**: 使用`DISTINCT`关键字可以查询数据库表内不重复的记录。例如: ...
- **复合字段**:当需要基于多个字段(如`peopleId`和`seq`)来查找重复记录时,可以在`GROUP BY`子句中同时包含这些字段。 - **SQL示例**: ```sql SELECT peopleId, seq FROM vitae GROUP BY peopleId, seq ...
Oracle 数据库提供了一系列 SQL 语句来帮助我们查询和删除这些重复的记录。以下是一些常用的 SQL 技巧,用于处理重复记录的问题。 1. **查询重复记录**: 当我们想找出基于单一字段(如 `Id`)的重复记录时,可以...
- `SELECT TOP 10 * FROM 数据表 WHERE 字段名 = 字段值 ORDER BY 字段名 [DESC]`:这是SQL Server的语法,但在MySQL中,你可以使用`LIMIT 10`来获取前10条匹配的记录。 - `SELECT * FROM 数据表 WHERE 字段名 IN...
SQL 重复记录处理是数据库管理中的常见问题,尤其是在数据清洗和数据整合时。以下是对标题和描述中涉及的知识点的详细说明: **一、查询重复记录** 1. **多字段重复查询**: 使用自连接可以查询多字段同时重复的...
当我们谈论“300万条mysql测试数据”时,这意味着我们拥有一份包含三百万记录的数据集,专门用于测试和验证MySQL在处理大规模数据时的性能、查询效率以及系统的稳定性和可靠性。 首先,测试数据的重要性在于它能够...
- **COUNT(*|字段名)**: 统计行数或某列不为空的行数。 - **MAX(字段名)**: 获取字段的最大值。 - **MIN(字段名)**: 获取字段的最小值。 - **SUM(字段名)**: 计算字段的总和。 这些函数的使用方法如下: ```sql ...
### Java如何获得数据库表中各字段的字段名 在Java编程中,经常需要与数据库进行交互,例如查询、更新或删除等操作。其中一项常见需求是获取数据库表中的所有字段名称。这通常在动态生成报表或者需要根据数据库结构...
`COUNT(字段名)` 返回指定字段非空值的行数。 - **最大值**: `MAX(字段名)` 返回指定字段的最大值。 - **最小值**: `MIN(字段名)` 返回指定字段的最小值。 - **求和**: `SUM(字段名)` 返回指定字段的总和。 通过...
- **定义**: `INSERT INTO` 语句用于向表中插入一条或多条记录。 - **语法**: ```sql INSERT INTO 表名 (字段1, 字段2, ...) VALUES (值1, 值2, ...); ``` - **示例**: ```sql INSERT INTO customer (First_...
- **解释**:向表中插入一条或多条记录,或者将一个表的所有记录插入到另一个表中。 ##### 数据记录统计函数 - **AVG(字段名)**:计算字段的平均值。 - **COUNT(*; 字段名)**:统计行数或特定字段非空值的数量。 - ...
sql 查出一张表中重复的所有记录数据 1.表中有id和name 两个字段,查询出name重复的所有数据 select * from xi a where (a.username) in (select username from xi group by username having count(*) > 1) 2、...
- `COUNT(*)`或`COUNT(字段名)`:统计记录数,`COUNT(*)`包括所有记录,`COUNT(字段名)`则只计算指定字段非空的记录。 - `MAX(字段名)`:找出字段的最大值。 - `MIN(字段名)`:找出字段的最小值。 - `SUM(字段名...