单个表中的选择查询中的性能问题

时间:2010-03-16 07:14:13

标签: sql select sybase query-optimization

我有一张表格如下

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的

2 个答案:

答案 0 :(得分:2)

我的建议是通过以适当的间隔“归档”日志条目到归档表来减少需要查询的数据量。

如果您提供关于当前和归档日志数据的联合视图,您仍然可以访问所有条目,但访问当前日志会大大减少。

答案 1 :(得分:1)

添加包含UserId和Dirty字段的索引。将UserId置于Dirty之前的索引中,因为它具有更多唯一值。