前言
学习MySQL过程中的一些心得体会,知识点梳理汇总
基础
MySQL命令行登录数据库
1 | mysql -hxxx.xxx.com -uroot -p |
查看mysql版本号
1 | 1、直接使用mysql命令查看版本 |
1 | # 4、使用sql查看版本信息 |
显示配置参数
1 | show global status; |
一、SQL连接
SQL的四种连接:内连接;外连接:左外连接、右外连接、全连接;
内连接有两种写法(显式、隐式内连接),作用一样
ON和WHERE的区别
left join,right join,full join的特殊性决定了ON条件的特殊性
- inner join中条件放在ON和WHERE中,作用相同返回的结果一样;
- WHERE条件是在临时表生成好后,再对临时表进行过滤的条件;
- ON在生成连接表时起作用
- left join 无论ON的条件是否满足,都会返回左表的所有记录,即on条件对左表不起作用,右表起作用;
- right join 无论ON的条件是否满足,都会返回右表的所有记录,即on条件对右表不起作用,左表起作用;
- full join 无论ON的条件是否满足,都会返回左、右表的所有记录,即on条件对左、右表都不起作用。
总结:
1 | 对于左连接来说,放在ON里面的右表条件就是-先筛选后连接,保证连接左边数据完整;放在WHERE中就得-先连接后筛选。同理右外,全外。 |
举例说明
1 | select * from student a,score b where a.id = b.stu_id and b.score > 90 |
Nested Loop Join、Merge Join、Hash Join –TODO
二、索引使用
1、索引命名
阿里java编程规范
【强制】主键索引名为pk_字段名;唯一索引名为uk_字段名;普通索引名则为idx_字段名。
说明:pk_即primary key;uk_即unique key;idx_即index的简称。
待确认
A表(base_org_dtl) 607493条记录
B表(dict_dtl)8条记录
当B表的dict_code不创建索引时,执行速度2.224s,数据字典小表创建索引后3.003s,相差将近0.8秒
1 | -- 执行速度比对(b表关联字段创建索引后,查询速度反而变慢) |
1 | -- 创建索引 |
分析SQL执行计划
大表A的Extra 带索引和不带索引分别是: Using where
和Using where; Using join buffer (Block Nested Loop)
的区别
三、MySQL执行计划
待学习知识点
join buffer
join类型为all, index, range
扫描类型是all或者index。