一个表里有一百五十万条记录,表结构如下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建立索引后执行效率还是相同的请问各位高手,有招么
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建立索引后执行效率还是相同的请问各位高手,有招么
SELECT COUNT(DISTINCT USER_ID) FROM BID WHERE TIME between E_TIME-interval S_BF SECOND and E_TIME
SELECT COUNT(DISTINCT USER_ID)
FROM BID
WHERE `TIME` >E_TIME-interval S_BF SECOND and `TIME`< E_TIME可以考虑在user——id也加个索引
还有我的意思是 你可以在user_id上单独放个索引 或者不放 但是用我的语句去试试~