数据库笔记
程序员文章站
2022-06-11 21:43:30
...
- 真的是不学习不知道自己的不足,今天看博客又学到了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])
逻辑查询处理的步骤序号(前面序号为执行顺序,后面为执行部分):
(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>SQL优化建议
- mysql嵌套子查询效率确实比较低,可以将其优化成连接查询。
- 连接表时,可以先用where条件对表进行过滤,然后做表连接(虽然mysql会对连表语句做优化)。
- 建立合适的索引,必要时建立多列联合索引。
- 学会分析sql执行计划,mysql会对sql进行优化,所以分析执行计划很重要。
- 列类型尽量定义成数值类型,且长度尽可能短,如主键和外键,类型字段等等。
- 根据需要来建立合适的索引。根据需要建立单列或者多列联合索引,在排序字段上建立索引会提高排序的效率。
- 根据业务场景建立覆盖索引。(索引覆盖:就是查询的列都建立了索引,这样在获取结果集的时候不用再去磁盘获取其它列的数据,直接返回索引数据即可)
- 多表连接的字段上需要建立索引,这样可以极大的提高表连接的效率。
- where条件字段上需要建立索引。
- 排序字段上需要建立索引。
- 分组字段上需要建立索引。
- Where条件上不要使用运算函数,以免索引失效。
参考:cnblogs:一次非常有意思的sql优化经历
上一篇: 数据库笔记