欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数据库笔记

程序员文章站 2022-06-11 21:43:30
...
  1. 真的是不学习不知道自己的不足,今天看博客又学到了MySQL 数据库的两个SQL用法,一个是USING关键字用法,一个是GROUP_CONCAT函数。
    • USING等同于 关联查询join操作中on的用法,比如 user表与order表中user_id字段关联,则可以这样使用:USING(user_id) 等价于 on user.user_id = order.user_id。
    • GROUP_CONCAT函数
GROUP_CONCAT([DISTINCT] expr [,expr ...]
             [ORDER BY {unsigned_integer | col_name | expr}
                 [ASC | DESC] [,col_name ...]]
             [SEPARATOR str_val])

参考文档?自然是查看官方文档啦!

  1. 逻辑查询处理的步骤序号(前面序号为执行顺序,后面为执行部分):
    (8) SELECT (9) DISTINCT(select_list)
    (1) FROM <left_table>
    (3) <join_type>JOIN<right_table>
    (2) ON<join_condition>
    (4) WHERE<where_condition>
    (5) GROUP BY<group_by_list>
    (6) WITH{CUBE|ROLLUP} ???
    (7) HAVING<having_condition>
    (10) ORDER BY<order_by_list>
    (11) LIMIT<limit_number>

  2. SQL优化建议

  • mysql嵌套子查询效率确实比较低,可以将其优化成连接查询。
  • 连接表时,可以先用where条件对表进行过滤,然后做表连接(虽然mysql会对连表语句做优化)。
  • 建立合适的索引,必要时建立多列联合索引。
  • 学会分析sql执行计划,mysql会对sql进行优化,所以分析执行计划很重要。
  • 列类型尽量定义成数值类型,且长度尽可能短,如主键和外键,类型字段等等。
  • 根据需要来建立合适的索引。根据需要建立单列或者多列联合索引,在排序字段上建立索引会提高排序的效率。
  • 根据业务场景建立覆盖索引。(索引覆盖:就是查询的列都建立了索引,这样在获取结果集的时候不用再去磁盘获取其它列的数据,直接返回索引数据即可)
  • 多表连接的字段上需要建立索引,这样可以极大的提高表连接的效率。
  • where条件字段上需要建立索引。
  • 排序字段上需要建立索引。
  • 分组字段上需要建立索引。
  • Where条件上不要使用运算函数,以免索引失效。
    参考:cnblogs:一次非常有意思的sql优化经历