计算具有大量数据的表可能非常慢,有时需要几分钟; 它还可能在繁忙的服务器上生成死锁.我想显示实际值,NOLOCK不是一个选项.
我使用的服务器是SQL Server 2005或2008 Standard或Enterprise - 如果重要的话.我可以想象SQL Server维护每个表的计数,如果没有WHERE子句,我可以很快得到这个数字,对吗?
例如:
SELECT COUNT(*) FROM myTable
Run Code Online (Sandbox Code Playgroud)
应立即返回正确的值.我是否需要依赖统计数据进行更新?
我试图从一个有22米行的表中获取用户的订阅者数量.
我的sql如下:
SELECT
COUNT(id)
FROM
subscribers
WHERE
suid=541839243781
Run Code Online (Sandbox Code Playgroud)
需要12.6020秒才能加载
然而,以下相同的查询(获取用户的订阅)只需要0.0036秒加载(似乎没问题)
SELECT
COUNT(uid)
FROM
subscribers
WHERE
uid=541839243781
Run Code Online (Sandbox Code Playgroud)
我的说明:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE dvx_subscribers index 4 4 16 NULL 22041275 Using where; Using index
Run Code Online (Sandbox Code Playgroud)
显示创建表:
CREATE TABLE `subscribers` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`sid` bigint(20) unsigned NOT NULL,
`uid` bigint(20) unsigned NOT NULL,
`suid` bigint(20) unsigned NOT NULL,
`date` datetime NOT NULL,
KEY `id` (`id`),
KEY …Run Code Online (Sandbox Code Playgroud)