SQL与性能调优

具体介绍复杂SQL的编写与数据库性能优化的技巧

Posted by chengweii on October 20, 2017

SQL

SQL解析

执行计划

复杂SQL编写

查出每门课都大于80分的学生

SELECT name
FROM   table
GROUP  BY name
HAVING MIN(fenshu) > 80

删除重复数据

DELETE FROM tablename
WHERE  id NOT IN(SELECT MIN(id)
                 FROM   tablename
                 GROUP  BY student_no,
                           student_name,
                           course_id,
                           course_name,
                           score)

数据转置

SELECT year,
       (SELECT amount
        FROM   sale m
        WHERE  month = 1
               AND m.year = sale.year) AS m1,
       (SELECT amount
        FROM   sale m
        WHERE  month = 2
               AND m.year = sale.year) AS m2,
       (SELECT amount
        FROM   sale m
        WHERE  month = 3
               AND m.year = sale.year) AS m3,
       (SELECT amount
        FROM   sale m
        WHERE  month = 4
               AND m.year = sale.year) AS m4
FROM   sale
GROUP  BY year

批量更新

UPDATE T_DEMO_ZYCL_WFXW
SET    WFLX = CASE ID
                WHEN '1' THEN '4'
                WHEN '2' THEN '3'
                WHEN '3' THEN '1'
                WHEN '4' THEN '2'
                WHEN '5' THEN '5'
              END
WHERE ID IN ('1','2','3','4','5')

查询第10条到第20条数据

SELECT * FROM sale LIMIT 10, 20

查询每个用户最新的订单数据

SELECT
	*
FROM
	ORDER o1
WHERE
	o1.create_time = (
		SELECT
			MAX(o2.create_time)
		FROM
			ORDER o2
		WHERE
			o2.user_id = o1.user_id
		GROUP BY
			o2.user_id
	)

性能优化

参考文献

mysql的sql执行计划详解
SQL语句各个部分执行顺序
SQL面试题
步步深入:MySQL架构总览->查询执行流程->SQL解析顺序