我有一张表格如下
dbo.UserLogs
-------------------------------------
Id | UserId |Date | Name| P1 | Dirty
-------------------------------------
每个userId可以有几条记录[甚至以百万计]
我在Date列上有聚簇索引,并且在时间范围内非常频繁地查询该表。 'Dirty'列是不可为空的,只能取0或1,所以我'Dirty'上没有索引
我在此表中有数百万条记录,在我的应用程序的一个特定情况下,我需要查询此表以获取至少有一条标记为脏的记录的所有UserId。
我尝试了这个查询 - 从UserLogs中选择distinct(UserId),其中Dirty = 1
我总共有1000万条记录,这需要10分钟才能运行,我希望它的运行速度比这快得多。
[我可以在不到一分钟的时间内在日期栏上查询此表。]
欢迎任何意见/建议。
我的环境 64位,sybase15.0.3,Linux的
答案 0 :(得分:2)
我的建议是通过以适当的间隔“归档”日志条目到归档表来减少需要查询的数据量。
如果您提供关于当前和归档日志数据的联合视图,您仍然可以访问所有条目,但访问当前日志会大大减少。
答案 1 :(得分:1)
添加包含UserId和Dirty字段的索引。将UserId置于Dirty之前的索引中,因为它具有更多唯一值。