一个表里有一百五十万条记录,表结构如下Create TABLE BID(
AUCTION_ID INT NOT NULL,
USER_ID VARCHAR(30) NOT NULL,
BID INT NOT NULL,
TIME DATETIME NOT NULL,
TYPE VARCHAR(20) NOT NULL,
 PRIMARY KEY(AUCTION_ID,BID)
)需要建立查询找出某一时间段有多少DISTINCT USER_ID, 有没有什么高效的方案?
目前的查询用法是
SELECT COUNT(DISTINCT USER_ID) FROM BID WHERE TIMESTAMPDIFF(SECOND,TIME,E_TIME)<S_BF AND TIMESTAMPDIFF(SECOND,TIME,E_TIME)>0;其中E_TIME是给定时间点, S_BF是提前的秒数.我不知道能不能用索引提高效率,但是貌似索引是最直接比较时有效,但是时间比较用到了函数 TIMESTAMPDIFF实际测试对TIME建立索引后执行效率还是相同的请问各位高手,有招么

解决方案 »

  1.   

    创建基于(TIME, USER_ID) 的索引然后修改你的查询语句为
    SELECT COUNT(DISTINCT USER_ID) FROM BID WHERE TIME between E_TIME-interval S_BF SECOND and E_TIME
      

  2.   

    你的`time`字段这么加索引起不到效果 因为用在函数里面了这个字段改成这样 :
    SELECT COUNT(DISTINCT USER_ID) 
    FROM BID 
    WHERE `TIME` >E_TIME-interval S_BF SECOND and `TIME`< E_TIME可以考虑在user——id也加个索引
      

  3.   

    那啥...我按两位的指示加了(USER_ID,TIME)的索引,然后用between and....结果是执行时间延长8倍...原来5秒,现在40秒...是不是哪里搞错了- -
      

  4.   

    。。我的语句范围不一样吧跟1L的。。
    还有我的意思是 你可以在user_id上单独放个索引 或者不放 但是用我的语句去试试~
      

  5.   

    果然是我自己搞错了,不该把TIME和USER的索引建在一起.现在单对TIME建索引,100毫秒解决问题... 多谢二位高手,这下省事多了.