zoukankan      html  css  js  c++  java
  • 数据库——SQL语句与优化

    一、DATE_FORMAT()函数(指的是MySQL数据库)            原文地址

    功能是:DATE_FORMAT(date,format) 用于以不同的格式显示日期/时间数据。参数有date(合法日期)和format(规定的时间/日期输出格式)

    可使用的格式:
    格式     描述
    %a        缩写星期名
    %b        缩写月名
    %c        月,数值
    %D        带有英文前缀的月中的天
    %d        月的天,数值(00-31)
    %e        月的天,数值(0-31)
    %f        微秒
    %H        小时 (00-23)
    %h        小时 (01-12)
    %I        小时 (01-12)
    %i        分钟,数值(00-59)
    %j        年的天 (001-366)
    %k        小时 (0-23)
    %l        小时 (1-12)
    %M        月名
    %m        月,数值(00-12)
    %p        AM 或 PM
    %r        时间,12-小时(hh:mm:ss AM 或 PM)
    %S        秒(00-59)
    %s        秒(00-59)
    %T        时间, 24-小时 (hh:mm:ss)
    %U        周 (00-53) 星期日是一周的第一天
    %u        周 (00-53) 星期一是一周的第一天
    %V        周 (01-53) 星期日是一周的第一天,与 %X 使用
    %v        周 (01-53) 星期一是一周的第一天,与 %x 使用
    %W        星期名
    %w        周的天 (0=星期日, 6=星期六)
    %X        年,其中的星期日是周的第一天,4 位,与 %V 使用
    %x        年,其中的星期一是周的第一天,4 位,与 %v 使用
    %Y        年,4 位
    %y        年,2 位

    常用格式:
    DATE_FORMAT(create_time,'%c月%d日')                --->如:5月01日
    DATE_FORMAT(create_time,'%Y年%c月%d日')            --->如:2018年5月01日
    DATE_FORMAT(create_time,'%Y-%c-%d')                --->如:2018-5-01

    二、 SQL语句优化

    1、对查询进行优化,应尽量避免全表扫描,首先应考虑在where 及order by 涉及的列上建立索引。

    2、应尽量避免在where 子句中使用!= 或<> 操作费,否则引擎放弃使用索引而进行全表扫描。

    3、应尽量避免在where 子句中对字段进行 null值判断。否则将导致引擎放弃使用索引而进行全表扫描,如:select  * from t where num is null

    可以在num上设置默认值0 ,确保表中num列没有null值。然后这样查询

    select num   from t  where t.num=0

    4、应该尽量避免在where 子句中使用 or来连接条件,否则将导致引擎放弃索引而进行全表扫描,如:select num   from t  where  num =10  or   num=20

    可以这样查询:

    select num   from t where num=10  union all  select num    from t where num= 20

    注意:union 与union all 区别

    其中 两者的作用是把结果集查询出来合并 然后返回一个结果集 。但是使用前提是两表具有相同列数与 对应列数的数据类型相同。union 会对 合并结果集进行排序  筛选重复的元素  占用CPU大   建议数据量大  不使用。反之 union all不会对其结果集进行排序 、筛选。直接返回。

    5、这样查询也会导致全表查询 

      select  num    from t where t.name  like '%abc%'

    若提高效率 则使用全文检索。

    6、 in 和not in要慎用,否则也会导致全表扫描,如:

    select num    from t   where num in('1','2','3')

    对于连续的数值  ,能用between  就不要用in

    select  num    from t where num between 1  and  3

    7、应尽量避免在where 子句中对字段 进行表达式操作,这也将会导致全表扫描。

    select  num    from t  where  num/2=100

    8、指定 列名查询时  尽量将列名大写,在我们数据库中的解析器 解析时 会把SQL转化成大写。如果直接写成大写  就省去这一步,提高效率。

    9、很多时候用exists  代替 in是一个好的选择

    select num  from t  where num in(select  num  from tt)

    可以写成;

    select  * from t where exists(select  1 from tt  where  num=t.num)

    10、任何地方都不要使用  select * from t,用具体的字段列表代替 *   ,不要返回用不到的字段。

    11、索引并不是越多越好,索引固然可以提高相应的select 的效率,但同时也降低 了 insert  及update的效率,因为insert 或 update 时 有可能会重建索引。一般 一张表中最好不超过 6个。

    12、合理建立索引,一般在经常查询的字段上建立索引 提高查询速度。避免在像 “性别“字段建立  ,原因因为这样的字段 总只有两个值‘男’ ‘女’

    13、避免频繁创建和删除临时表,以减少系统表资源的消耗。

  • 相关阅读:
    Nodejs下载和第一个Nodejs示例
    永久关闭Win10工具栏的TaskbarSearch控件
    对称加密,非对称加密,散列算法,签名算法
    【转】TTL和RS232之间的详细对比
    zlg核心板linux系统中查看系统内存等使用信息
    Power BI后台自动刷新数据报错 The operation was throttled by Power BI Premium because there were too many datasets being processed concurrently.
    剪切板和上传文件内容获取
    CSS, LESS, SCSS, SASS总结
    文字程序
    electron 打包“ERR_ELECTRON_BUILDER_CANNOT_EXECUTE”
  • 原文地址:https://www.cnblogs.com/Fantastic-Code/p/11578000.html
Copyright © 2011-2022 走看看