例如有一张日志表,3个字段:id
(int
,primary key
,auto_increment
)、content
(text
)、create_time
(datetime
),表中有3000万条数据,没有索引,现在要在不改变表结构的情况下(不分表、不加索引),查询某一个时间点的日志(例如查询create_time 是2016-10-18 18:49:10的记录),可以怎样进行查询?
如果是经常查询的话,建议加个索引,或排序,因为数据量很大,只是考虑到查询速度!
按正常情况下查不就行了么???先按时间查出结果,再把查询结果按id 分组
大概思路就是,
selecte *
from 表
where create_time=convert(datetime,'YYYY-MM-DD HH24:MI:SS')
group by id ;
应该是在日期转换上有点麻烦,我没用过convert()日期转换,也不清楚,关于日期转换,你参考一下这个链接吧,比较详细
http://www.w3school.com.cn/sql/func_convert.asp
你这select * 然后又group by id确定能查出来东西???
为什么不能加索引?你不加索引那你用db干嘛?还不如直接写到文件中去。
好吧,我没有说清楚,这是道面试题,明确说明了是在没有(也不添加)索引的情况下
@黄棣-dee: 估计这个只是个前奏题,后面还有性能相关的玩意。
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。
mysql?看着类型什么的,像是sqlserver。。。
另外,不是查询么???看着好像也没有什么特别的啊,不是select * from table where create_time=‘2016-10-18 18:49:10’???
看着题里面没有特别要求。。。