代码之家  ›  专栏  ›  技术社区  ›  Inv3r53

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

  •  3
  • Inv3r53  · 技术社区  · 15 年前

    我有一张桌子如下

    dbo.UserLogs
    
    -------------------------------------
    Id | UserId |Date | Name| P1 | Dirty
    -------------------------------------
    

    每个用户ID可以有多个记录[甚至以百万计]

    我在日期列上有聚集索引,并且在时间范围内非常频繁地查询这个表。 列“dirty”不可为空,只能取0或1,因此“dirty”上没有索引。

    我在这个表中有数百万条记录,在我的应用程序中的一个特殊情况下,我需要查询这个表,以获取至少有一条记录被标记为脏的所有用户ID。

    我尝试过这个查询-从用户日志中选择distinct(userid),其中dirty=1

    我总共有1000万条记录,这需要10分钟的运行时间,我希望这个运行速度比这个快得多。

    [我可以在不到一分钟的时间内查询“日期”列中的此表。]

    欢迎提出任何意见/建议。

    我的EV 64位,Sybase15.0.3,Linux

    2 回复  |  直到 15 年前
        1
  •  1
  •   Guffa    15 年前

    添加包含userid和dirty字段的索引。在索引中把userid放在dirty之前,因为它有更多的唯一值。

        2
  •  2
  •   lexu    15 年前

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

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