Sql Informix—高效查找10个最近的调用

Sql Informix—高效查找10个最近的调用,sql,informix,Sql,Informix,我有一个表,其中包含呼叫号码和时间戳等数据。我想找到最近十个独特的电话。此SQL查询可用于: SELECT first 10 t.originatordn FROM (SELECT DISTINCT a.originatordn,a.startdatetime AS time FROM contactcalldetail a WHERE originatordn <> '') t ORDER BY t.time DESC 问题是这个表有超

我有一个表,其中包含呼叫号码和时间戳等数据。我想找到最近十个独特的电话。此SQL查询可用于:

SELECT first 10 t.originatordn 
FROM 
     (SELECT DISTINCT a.originatordn,a.startdatetime AS time 
      FROM contactcalldetail a 
      WHERE originatordn <> '') t 
ORDER BY t.time DESC

问题是这个表有超过400万条记录,所以速度非常慢。有没有更好的方法来执行此查询?

如果没有索引,我不知道如何加快查询速度。因此,如果您还没有索引,我建议您创建一个索引,并运行一个更简单的查询,SQL优化器可以使用仅索引扫描来执行该查询

create index ix1 on contactcalldetail (startdatetime, originatordn)

select 
    distinct originatordn as calling_number 
  from contactcalldetail
  where originatordn <> ''
  order by a.startdatetime desc
  limit 10

我尝试在我的Debian服务器中安装Informix,但没有成功。对不起,我帮不上忙了。别担心。感谢您的输入。如果您为表显示一个大纲模式,包括表上的任何索引,将会有所帮助。条件与“不为空”不同-我不确定这是否对您有影响,但为什么您会有不知道发起者号码的呼叫记录?。您正在使用哪个版本的Informix,在哪个平台上?您是否尝试过OLAP窗口功能?某些呼叫者可能会抑制其号码。使用IDS 11.70.UC7XA。架构详细说明此表上有2个索引。如果我错了,请纠正我,但我认为OLAP功能仅在IDS 12中可用。是的,我认为OLAP功能仅在12.10中可用。我认为升级是不可能的,无论如何,对于这个问题-你应该期待升级很快。有一个由4部分组成的主键,它可能是两个索引之一。另一个索引是什么?你真的需要一个以开始时间为前导字段的索引才能快速得到一个好的答案——否则,DBMS必须扫描大约400万条记录才能得出答案,这肯定会很慢。