请教,能否对时间建立索引提高查询效率

superpig2k 2010-08-24 06:14:10
一个表里有一百五十万条记录,表结构如下

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建立索引后执行效率还是相同的

请问各位高手,有招么
...全文
337 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
superpig2k 2010-08-24
  • 打赏
  • 举报
回复
果然是我自己搞错了,不该把TIME和USER的索引建在一起.现在单对TIME建索引,100毫秒解决问题... 多谢二位高手,这下省事多了.
feixianxxx 2010-08-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 superpig2k 的回复:]

那啥...我按两位的指示加了(USER_ID,TIME)的索引,然后用between and....结果是执行时间延长8倍...原来5秒,现在40秒...是不是哪里搞错了- -
[/Quote]
。。我的语句范围不一样吧跟1L的。。
还有我的意思是 你可以在user_id上单独放个索引 或者不放 但是用我的语句去试试~
superpig2k 2010-08-24
  • 打赏
  • 举报
回复
那啥...我按两位的指示加了(USER_ID,TIME)的索引,然后用between and....结果是执行时间延长8倍...原来5秒,现在40秒...是不是哪里搞错了- -
feixianxxx 2010-08-24
  • 打赏
  • 举报
回复
。。。你的`time`字段这么加索引起不到效果 因为用在函数里面了这个字段

改成这样 :
SELECT COUNT(DISTINCT USER_ID) 
FROM BID
WHERE `TIME` >E_TIME-interval S_BF SECOND and `TIME`< E_TIME


可以考虑在user——id也加个索引


ACMAIN_CHM 2010-08-24
  • 打赏
  • 举报
回复
创建基于(TIME, USER_ID) 的索引

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

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧