面试整理,mysql篇

1)mysql的链接查询

mysql的六种链接查询

a) 交叉链接 (cross join)  select * from A,B(,C) 或者select * from A cross join B (cross join C) 没有任何关联条件,结果是笛卡尔积,结果集会很大没有意义,很少使用

b) 内连接 select  * from A,B where A.id = B.id 或者 select * from A inner join B on A.id = B.id 查询多表同时符合某种条件的数据记录集合
内连接分为三种:
等值链接 on A.id = B.id
不等值链接 on A.id > B.id
自链接 select * from A T1 inner join A T2 on T1.id = T2.pid

c) 外连接  左外连接:left outer join 以左表为主表按照on 后的关联条件匹配右表,没有匹配到的用null填充,可以简写成left join ,右外链接相似,可以简写成 right join

d) 联合查询  select * from A union select * from B union select * from C .....  把多个结果集集中在一起,union前的结果为基准,需要注意的是联合查询的列数要相等,相同的记录会合并,,如果使用union all ,不会合并重复的记录行

e) 全连接  MySQL不支持全连接,但是可以使用 left join ,union ,right join代替
 select * from A left join B on B.id = B.id union select * from A right join B on A.id = B.id

2) mysql语句的优化与分析 

1)查找分析查询速度慢的原因
2)优化查询过程中的数据访问
3)优化长难的查询语句
4)优化特定类型的sql语句
分析sql查询慢的方法
1、记录慢查询日志,不要分析查询打开慢查询日志进行分析,这样比较浪费时间和精力,可以使用pt-query-digest工具与进行分析
2、show profile .   set profiling = 1; 开启,服务器上执行的所有语句会检测消耗的时间,存到临时表中
show profiles  。。。。show profile for query 临时表ID
3、show status  ,show status 会返回一些计数器,,show global status查看服务器级别的所有计数,,有时根据这些计数,可以猜测出哪些操作代价比较高或者消耗时间多
4、show processlist 观察是否有大量线程处于不正常的状态或者特征
5、explain,,分析单条sql语句
优化查询过程中的数据访问
1、查询数据太多导致性能下降,,是否有查询太多不必要的列或者行,,避免使用select * 会让优化器无法完成索引覆盖扫描的优化,,,用explain进行分析,看是否扫描了大量的行,返回少数行,,是否命中了预期的索引
2、改变数据表的结构,修改数据范式,,允许字段冗余
3、具体分析是用一个复杂的查询还是多个简单查询
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值