(一).sql性能下降原因
a. sql语句写的烂,比如select *,简而言之就是让数据库干了不需要干的活
b. 没有建立索引,或者索引失效
索引失效的情况包括没建好和没使用好,
1.没建好:
索引设在特征性不明显的字段 ,比如一张user表,有一个字段是性别sex,建立在sex意义不大.
索引设在不常用的字段
2.没用好:sql语句没写好,导致建立好的索引没用上,或者只用到了一部分
c. 关联查询太多join
d. 服务器调优以及各个参数设置(缓冲,线程数等等)
(二). sql执行顺序
1.开发者写的顺序
2.数据库的执行顺序
3.七种join
这里定义图的顺序编号规则为从左到右,从上往下的顺序(中间的AnB那个为编号3)
1. select <select list> from tableA A left join on tableB B on A.key=B.key
2. select <select list> from tableA A right join on tableB B on A.key=B.key
3. select <select list> from tableA A inner join on tableB B on A.key=B.key
4. select <select list> from tableA A left join on tableB B on A.key=B.key where B.key is NULL
5. select <select list> from tableA A right join on tableB B on A.key=B.key where A.key is NULL
6. select <select list> from tableA A full outer join on tableB B on A.key=B.key
7. select <select list> from tableA A full outer join on tableB B on A.key=B.key where A.key is NULL or B.key is NULL
由于mysql不支持(oracle支持)full outer join ,所以后面两种JOIN可以利用union的自动去重功能重新构建,
第六种sql可以变成
select <select list> from tableA A left join on tableB B on A.key=B.key
union
select <select list> from tableA A right join on tableB B on A.key=B.key
第七种sql可以变成
select <select list> from tableA A left join on tableB B on A.key=B.key where B.key is NULL
union
select <select list> from tableA A right join on tableB B on A.key=B.key where A.key is NULL