zoukankan      html  css  js  c++  java
  • 数据库的学习

    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 规定日期/时间的输出格式。

  • 相关阅读:
    hibernate和ibatis的区别
    [转] hibernate和ibatis的对比
    如何理解java的引用传递
    代理模式与装饰器模式的区别
    j2ee的异步消息机制
    什么是j2ee ??EJB与j2ee的关系?? 请看百度百科
    spring事务的传播性的理解
    Hibernate与IBatis的优缺点及可行性分析
    jQuery插件实现的方法和原理简单说明
    iReport使用教程
  • 原文地址:https://www.cnblogs.com/cherishforchen/p/11733355.html
Copyright © 2011-2022 走看看