数据库太大,有按年月分别建库的搞法?

tixisong 2014-12-04 09:47:01
我做的实时曲线,用的是sqlite,1s钟要保存一条记录,24小时运行,1年大概有3千多万记录,而且这个记录不能删除,用了索引,查询加limit是比较快,担心就是几年后数据太大,按年建库感觉太麻烦,程序中要加很多判断,不知道大家怎么处理?而且有几条曲线,一条曲线建个库?
...全文
203 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
benluobo 2014-12-04
  • 打赏
  • 举报
回复
你查询条件是c_time 索引是cool 和 c_time的联合 ,因为索引的前缀才能有效果,所以这个索引只能对cool查询或者两个条件一起的时候才会生效 你可以将这个索引的字段换一下顺序 或者再在c_time上单独建立索引
tixisong 2014-12-04
  • 打赏
  • 举报
回复
引用 1 楼 benluobobo 的回复:
可以考虑对表按时间进行分区 另外既然是实时曲线,应该不需要存储历史数据吧
就是要存储,以后看历史数据,像股票。

Table [t_tension]
    Fields: 3
        [id]: INTEGER
        [value]: real
        [c_time]: text
    Foreign Keys: 0
    Indexes: 1
        [cool]
            [c_time] 
    Triggers: 0
    Unique constraints: 0
    Check constraints: 0
这是我的表结构,索引为cool,c_time字段,可下面这句查询还是很慢,似乎索引没有起来到作用 select id,value,c_time from t_tension where datetime(c_time)>='2015-10-10 02:02:02' and datetime(c_time)<= '2015-10-10 02:10:00' limit 100;
benluobo 2014-12-04
  • 打赏
  • 举报
回复
可以考虑对表按时间进行分区 另外既然是实时曲线,应该不需要存储历史数据吧
ACMAIN_CHM 2014-12-04
  • 打赏
  • 举报
回复
参考一下数据仓库的概念,把常用的数据,比如最近一个月的放在一个数据库中,一个月以上的记录放在另一个数据库中。
tixisong 2014-12-04
  • 打赏
  • 举报
回复

表结构:
Table [t_tension]
    Fields: 3
        [id]: INTEGER
        [value]: real
        [c_time]: text
    Foreign Keys: 0
    Indexes: 1
        [cool]
            [c_time] 
    Triggers: 0
    Unique constraints: 0
    Check constraints: 0
表的数据:
id	value	c_time
1	41	     2014-12-04 08:59:30
1	467    2014-12-04 08:59:31
1	334	   2014-12-04 08:59:32
1	500	   2014-12-04 08:59:33
1	169	  2014-12-04 08:59:34
1	724	  2014-12-04 08:59:35
1	478	2014-12-04 08:59:36
1	358	2014-12-04 08:59:37
1	962	2014-12-04 08:59:38
1	464	2014-12-04 08:59:39
1	705	2014-12-04 08:59:40
1	145	2014-12-04 08:59:41
1	281	2014-12-04 08:59:42
1	827	2014-12-04 08:59:43
1	961	2014-12-04 08:59:44
1	491	2014-12-04 08:59:45
1	995	2014-12-04 08:59:46
.........

查询代码:
select id,value,c_time from t_tension where datetime(c_time)>='2015-10-10 02:02:02' and datetime(c_time)<= '2015-10-10 02:10:00' limit 100;
我反复测试发现,感觉sqlite对text排序太慢,虽然加了索引。结果把c_time 转成real类型,就是把时间转double存,再搜索,加索引与不加索引的差距就出来了。我不知道mysql数据库怎么样,若查询快的话我在考虑要不要换数据库
benluobo 2014-12-04
  • 打赏
  • 举报
回复
贴出 查询计划吧
tixisong 2014-12-04
  • 打赏
  • 举报
回复
引用 3 楼 benluobobo 的回复:
你查询条件是c_time 索引是cool 和 c_time的联合 ,因为索引的前缀才能有效果,所以这个索引只能对cool查询或者两个条件一起的时候才会生效 你可以将这个索引的字段换一下顺序 或者再在c_time上单独建立索引
那个cool 是索引的名字,不是字段,c_time这个才是字段

56,677

社区成员

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

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