MySQL下SQL性能下降原因分析及JOIN的七种写法

1.性能下降SQL慢(执行时间长,等待时间长)

  a.查询语句写的烂

  b.索引失效

    单值索引

    联合(复合)索引

  c.关联查询太多join(设计缺陷或不得已的需求)

  d.服务器调优及各个参数设置(缓冲、线程数等)

2.常见通用的join查询

  a.SQL执行顺序

    手写

SELECT 
  DISTINCT < select_list > FROM < left_table >
  < join_type > JOIN < right_table >
  ON < join_condition > WHERE< where_condition > GROUP BY< group_by_list > HAVING< having_condition > ORDER BY< order_by_condition > LIMIT < limit_number >

    机读

1  FROM <left_table>
2  ON <join_condition>
3  <join_type> JOIN <right_table>
4  WHERE <where_condition>
5  GROUP BY <group_by_list>
6  HAVING <having_condition>
7  SELECT
8  DISTINCT <select_list>
9  ORDER BY <order_by_condition>
10 LIMIT <limit_number>

    总结

  b.Join图

  c.建发SQL

  d.7种JOIN

    1)INNER JOIN(内连接)(AB独有)

     

SELECT 
    <select_list> 
FROM TableA A
INNER JOIN TableB B
ON A.key = B.key

    2)LEFT JOIN(左外连接)(A独有+AB独有)

     

SELECT
    <select_list>
FROM TableA A
LEFT JOIN TableB B
ON A.Key = B.Key

    3)RIGHT JOIN(右外连接)(B独有+AB独有)

SELECT
    <select_list>
FROM TableA A
RIGHT JOIN TableB B
ON A.Key = B.Key

    4)(A独有)

SELECT
    <select_list>
FROM TableA A
LEFT JOIN TableB B
ON A.Key = B.Key
WHERE B.Key IS NULL

    5)(B独有)

SELECT
    <select_list>
FROM TableA A
RIGHT JOIN TableB B
ON A.Key = B.Key
WHERE A.Key IS NULL

    6)FULL JOIN(全连接)(A+B)

    

SELECT
    <select_list>
FROM TableA A
FULL OUTER JOIN TableB B
ON A.Key = B.Key

# MySQL不支持这样的写法,以下是MySQL变通后的写法
SELECT
    <select_list>
FROM TableA A
LEFT JOIN TableB B
ON A.Key = B.Key
UNION
SELECT
  <select_list>
FROM TableA A
RIGHT JOIN TableB B
ON A.Key = B.Key

 

    7)(全连接 + 排除交集)(A独有+B独有)

SELECT
    <select_list>
FROM TableA A
FULL OUTER JOIN TableB B
ON A.Key = B.Key
WHERE A.Key IS NULL
OR B.Key IS NULL

# MySQL不支持这样的写法,以下是MySQL变通后的写法

SELECT
    <select_list>
FROM TableA A
LEFT JOIN TableB B
ON A.Key = B.Key
WHERE B.Key IS NULL
UNION
SELECT
  <select_list>
FROM TableA A
RIGHT JOIN TableB B
ON A.Key = B.Key
WHERE A.Key IS NULL 

 

posted @ 2021-02-18 15:51  学习大数据入门到放弃  阅读(249)  评论(0)    收藏  举报