|
|
1
27
想想看:数据库真的必须转到每一行才能做到这一点。
在多用户环境中
但是,有一些方法可以加快速度:如果在非空列上有索引,Oracle将计算索引的行而不是表的行。在适当的关系模型中,所有表都有主键,因此
位图索引具有空行的条目,因此如果有位图索引,则计数(*)将使用该索引。 |
|
|
2
52
如果您只需要一个粗略的估计,您可以从一个样本中进行外推:
为了提高速度(但降低精度),可以减小样本大小:
对于更高的速度(但精度更差),可以使用逐块采样:
|
|
|
3
43
这对大桌子很有用。
对于中小型桌子,以下内容可以。
干杯, |
|
|
4
13
如果表的非空列上有索引,则计数(*)将使用该索引。否则,它将执行全表扫描。请注意,索引不必是唯一的,它必须不为空。 这是一张桌子…
首先,我们要做一个没有索引的计数……
不,我们在可以包含空项的列上创建索引…
最后,让我们在非空列上构建索引….
|
|
|
5
7
选项1:在非空列上有一个索引,该索引可用于扫描。或创建基于函数的索引,如下所示:
然后可以对其进行扫描以给出计数。 选项2:如果您打开了监控,则检查监控视图用户选项卡的修改,并将相关值添加/减去到表统计中。 选项3:要快速估计大表,请调用SAMPLE子句…例如。。。
选项4:使用物化视图维护计数(*)。但是药效很强。 嗯。。。 |
|
|
6
5
您可以创建一个快速刷新物化视图来存储计数。 例子:
它会稍微减缓某些表上的突变,但计数会变得更快。 |
|
|
7
3
计算一张桌子的最快方法就是你所做的。没有什么技巧是你能做到的,Oracle还不知道。 有些事情你没有告诉我们。也就是说,你为什么认为这应该更快? 例如:
我承认我对41秒并不满意,但你真的认为它应该更快吗?如果你告诉我们这张桌子有180亿行,并且是在你2001年从车库里买来的笔记本电脑上运行的,那么41秒可能就不远了,除非你有更好的硬件。但是,如果你说你在Oracle9上,并且去年夏天运行了统计数据,你可能会得到不同的建议。 |
|
|
8
1
有一个相关的答案来自 Ask Tom 2016年4月出版。
|
|
|
9
0
您可以使用以下方法获得更好的性能:
|
|
|
10
-4
你可以用计数(1)代替 |
|
Homer Jay Simpson · 添加列出现次数 1 年前 |
|
|
Tez · 数据帧-统计三列中具有相似(相同)变量的变量的频率 1 年前 |
|
|
swat · 在同一列上选择SQL语句 1 年前 |
|
|
Elijah · 计算与其他列值关联的列中的值集[重复] 1 年前 |
|
|
Chulho Chang · 计算一行中特定字符的数量(不在范围内) 1 年前 |
|
TarJae · 如何在一次运行中对多个列计数使用计数 1 年前 |