1
4
还有另一个变化:选择客户机,然后使用交叉应用(..顶部(1)按……订购)以获取相关条目。
更新 在不知道模式的情况下谈论T-SQL查询的性能是没有意义的。这个查询在一个适当设计的模式上非常适合它的需要。由于访问是通过clientname和createdon进行的,因此即使是简单的模式也需要考虑到这一点:
让我们用大约2.4米的行加载表:
我们什么时候和IO打交道
1.9秒,从我的笔记本电脑(4岁,内存为1GB)的240万条条目中获取数据。而且在模式设计方面还有很大的改进空间。将clientname分离到一个规范化的表中,其中包含一个受信任的外键和它的日志条目,这将大大减少时间。(2,4)中entrytypeid的正确筛选索引也会有贡献。我们甚至没有开始探索并行性的可能性。 这是SQL,性能是在模式的绘图板上获得的,而不是在查询的文本编辑器中获得的。 |
2
2
单表扫描、无窗口功能、单分组方式、重复日期没有问题、窗口功能的性能相同,甚至比实际大型查询的性能更好。(更新:我不知道与使用ties/cross-apply方法的前1名相比,它的表现如何。因为它使用扫描,所以在某些情况下可能会变慢。)
如果有人想看到这一点,这里有一些创建脚本:
请注意,此方法利用给定数据类型的内部字节表示,这些数据类型的顺序与类型的值相同。像float或decimal这样的压缩数据类型将不起作用:这些类型首先需要转换为合适的类型,例如int、bigint或character。 此外,SQL 2008中的新日期和时间数据类型具有不同的表示形式,这些表示形式无法正确打包以用于此方法。我还没有检查时间数据类型,但是对于日期数据类型:
实际值是0x37B86E,所以它以相反的字节顺序存储它们(“零”日期是0001-01-01)。 |
3
1
你可以用专用的
这将自行联接表,并在
|
4
0
干得好。可能更快…不确定。 此外,这假定clientname+createdon是唯一的。
注意,我没有测试可能有打字错误。 |
Community wiki · SQL语法新手 1 年前 |
KateMak · 是否将多行中的多列与唯一id组合? 1 年前 |
Karuna · SQL中列内的筛选器[重复] 1 年前 |
Irvan Affandy · 为另一个选择选择声明的键 1 年前 |
Community wiki · 这个MySQL语句出了什么问题? 1 年前 |
Community wiki · 优化从同一表中提取的多列的查询 1 年前 |