首页 新闻 赞助 找找看

MySQL 千万级数据查询的方法

0
悬赏园豆:20 [待解决问题]

例如有一张日志表,3个字段:idintprimary keyauto_increment)、contenttext)、create_timedatetime),表中有3000万条数据,没有索引,现在要在不改变表结构的情况下(不分表、不加索引),查询某一个时间点的日志(例如查询create_time 是2016-10-18 18:49:10的记录),可以怎样进行查询?

nemo20的主页 nemo20 | 初学一级 | 园豆:120
提问于:2016-10-18 19:39
< >
分享
所有回答(4)
0

如果是经常查询的话,建议加个索引,或排序,因为数据量很大,只是考虑到查询速度!

按正常情况下查不就行了么???先按时间查出结果,再把查询结果按id 分组

大概思路就是,  

selecte *

from 表

where create_time=convert(datetime,'YYYY-MM-DD HH24:MI:SS')

group by id ;

应该是在日期转换上有点麻烦,我没用过convert()日期转换,也不清楚,关于日期转换,你参考一下这个链接吧,比较详细

http://blog.csdn.net/baiduandxunlei/article/details/9180075

 http://www.w3school.com.cn/sql/func_convert.asp

 

夜半风起 | 园豆:224 (菜鸟二级) | 2016-10-18 21:59

 你这select * 然后又group by id确定能查出来东西???

支持(0) 反对(0) 顾晓北 | 园豆:10844 (专家六级) | 2016-10-19 09:26
0

为什么不能加索引?你不加索引那你用db干嘛?还不如直接写到文件中去。

Daniel Cai | 园豆:10424 (专家六级) | 2016-10-18 23:05

 好吧,我没有说清楚,这是道面试题,明确说明了是在没有(也不添加)索引的情况下

支持(0) 反对(0) nemo20 | 园豆:120 (初学一级) | 2016-10-18 23:24

@黄棣-dee: 估计这个只是个前奏题,后面还有性能相关的玩意。

支持(0) 反对(0) Daniel Cai | 园豆:10424 (专家六级) | 2016-10-19 09:36
0

 

 

if(通常情况){

  select id,auto_increment,content,create_time

       from Table

     where create_time='2016-10-18 18:49:10'

}else{

  print '刁难你,哈哈!'

}

 

难道考的是where条件的时间转为数据库里的格式(保持一致),避免查询过程中的转换?

你可以写个测试一下,比如数据库为2016-01-01 01:01:01,

然后where为2016/01/01 01:01:01与2016-01-01 01:01:01之间的比较

如IO、CPU、内存的消耗情况。

 

然后补充一下,也有可能考的不是性能,而是语法,

MsSql是支持Convert和Cast都能支持,

貌似MySql不支持Convert,支持Cast。

 

 

chengeng | 园豆:294 (菜鸟二级) | 2016-10-19 09:21
0

mysql?看着类型什么的,像是sqlserver。。。

另外,不是查询么???看着好像也没有什么特别的啊,不是select * from table where create_time=‘2016-10-18 18:49:10’???

看着题里面没有特别要求。。。

顾晓北 | 园豆:10844 (专家六级) | 2016-10-19 09:28
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册