数据库的学习
1.索引:
加索引:普通加索引:ALTER TABLE `table_name` ADD INDEX index_name ( `column` )
例如:ALTER TABLE `bliss_center.message_recode` ADD INDEX 'idx_created_time' ( `created_time` )
为什么加了索引速度就会变快呢:https://blog.csdn.net/qq_15037231/article/details/80539964
https://blog.csdn.net/longzhongxiaoniao/article/details/85799368
数据库建立索引为什么会加快查询速度 :
你的理解其实没啥问题。索引就是通过事先排好序,从而在查找时可以应用二分查找等高效率的算法。
一般的顺序查找,复杂度为O(n),而二分查找复杂度为O(log2n)。当n很大时,二者的效率相差及其悬殊。
举个例子:
表中有一百万条数据,需要在其中寻找一条特定id的数据。如果顺序查找,平均需要查找50万条数据。而用二分法,至多不超过20次就能找到。二者的效率差了2.5万倍!
首先明白为什么索引会增加速度,DB在执行一条Sql语句的时候,默认的方式是根据搜索条件进行全表扫描,遇到匹配条件的就加入搜索结果集合。如果我们对某一字段增加索引,查询时就会先去索引列表中一次定位到特定值的行数,大大减少遍历匹配的行数,所以能明显增加查询的速度。
MySQL官方对于索引的定义为:索引是帮助MySQL高效获取数据的数据结构。即可以理解为:索引是数据结构。
2.mysql和oracle数据库根据时间查询数据,以及时间上的区别
Oracle:使用时间函数to_date()和to_char();(还有to_timestamp一般用不到)
to_date(),函数是将字符串转换成时间格式,to_char()是将时间转换成字符串格式
例如:
select t.* from payflow_info t where t.trade_pay_time >= to_date('2019-10-20','yyyy-mm-dd');
select t.* from payflow_info t where t.trade_pay_time >= to_date('2019-10-19 00:00:00','YYYY-MM-DD HH24:mi:ss');
select * from dual where time between to_date('2012-06-18 00:00:00','yyyy-mm-dd hh24:mi:ss') and to_date('2012-06-18 23:59:59','yyyy-mm-dd hh24:mi:ss');
select * from payflow_info where to_char(trade_pay_time,'yyyy-mm-dd')>='2019-10-19';
tips:目前项目中,oracle的时间类型为TIMESTAMP(6),在表中展现的样子是:03-12月-19 15:24:59.239000 下午,
因为:(timestamp)原格式是:01-1月 -00 02.30.00.000000000 下午,TIMESTAMP(6)括号里面的数字6,timestamp后面的数字表示秒后面的小数位,默认的timestamp等同于timestamp(6),
timestamp格式,插入时间例如,update payflow_info set TRADE_CREATE_TIME=TO_DATE('2018-03-06 08:00:00','yyyy-mm-dd hh24:mi:ss');
会自动变成timestamp的默认格式06-3月 -18 08.00.00.000000 上午,并不会变成TO_DATE('2018-03-06 08:00:00','yyyy-mm-dd hh24:mi:ss')这里指的的这样。
查询的时候,直接select t.* from payflow_info t where t.trade_pay_time >= to_date('2019-10-19 00:00:00','YYYY-MM-DD HH24:mi:ss');就可以查出来数据,不需要转成 03-12月-19 15:24:59.239000 下午 这样来查询;
知识链接:https://www.cnblogs.com/ShaYeBlog/p/6594312.html
mysql查询数据:使用date_format
第一种:直接用时间就行
select * from pay_serial where create_date>=('2019-11-21 00:00:00') and create_date<('2019-11-22 00:00:00');
或者
select * from pay_serial where create_date between '2019-11-21' and '2019-11-22';
上面这2个查出来的数据是一样的
第二种:用date_format函数
select * from pay_serial where date_format(create_date,'%Y-%m-%d') between '2019-11-03' and '2019-11-31';
查询每一分钟:
select SUM(amount) ,count(*) as '总共',DATE_FORMAT(create_date,'%Y-%m-%d %H:%i:00') from `pay_serial`
where create_date>='2019-11-20 16:15:00' and create_date <= '2019-11-21 01:59:59'
GROUP BY DATE_FORMAT(create_date,'%Y-%m-%d %H:%i:00') order by DATE_FORMAT(create_date,'%Y-%m-%d %H:%i:00') ;
sum:求和函数
DATE_FORMAT函数:
DATE_FORMAT(date,format)
date 参数是合法的日期。format 规定日期/时间的输出格式。
posted on 2019-10-24 17:04 Cherishforchen 阅读(147) 评论(0) 编辑 收藏 举报