MySQL(二):MySQL性能优化

【目录】

  • MySQL(一):MySQL中的事务
  • MySQL(二):MySQL性能优化

【前言】

        在对MySQL的事务进行了学习总结之后,继续对MySQL的性能优化进行学习并进行总结,将自己在工作中的性能优化经验以及自己一个实战进行记录,与大家共享;

【那些不得不知的优化技巧】

        一、根据自己以往的经历和查阅些相关资料之后对MySQL的优化总结了以下几点:

              1、建表注意事项:字段要尽可能少,将不同的字段拆分尽量可以查缓存;

              2、SQL语句的优化(比如join联表查询时要先缩小两个表数据范围然后再join);

              3、建立索引---索引的分类:唯一索引、主键索引、全局索引;

              4、分表分区---分表 纵向分割(将列分到不同的表中) 、横向分割(按行的特性将数据分);

              5、主从复制和读写分离;

              6、数据库的集群;

        二、真实案例

              1、场景说明:

                   需要找到用户最新一笔订单,并且订单为结清状态,并且当前时间在其结清时间的7到15天内一批数据

              2、未优化前的sql情况

                   (1)实现SQL语句

SELECT
	id,
	customer_id,
	repayment_state,
	final_settle_date
FROM
	(
		SELECT
			id,
			customer_id,
			repayment_state,
			final_settle_date
		FROM
			wf_cr_borrow_order
		WHERE
			id > 0
		ORDER BY
			apply_time DESC
	) AS temp
GROUP BY
	customer_id
ORDER BY
	id
LIMIT 1000

                   (2)执行情况(线上MySQL慢日志查看)

MySQLTotalExecutionCounts MySQLTotalExecutionTimes MaxExecutionTime MaxLockTime ParseTotalRowCounts ParseMaxRowCount ReturnTotalRowCounts ReturnMaxRowCount SQLText
761 6214 19 0 2232121035 5919899 761000 1000 select id , customer_id , repayment_state , final_settle_date from ( select id , customer_id , repayment_state , final_settle_date from wf_cr_borrow_order where id > :1 order by apply_time desc ) as temp group by customer_id order by id limit :2

                     解释:每天需要执行761次,每次最多耗时19秒,总共执行1.7小时;

              3、优化后的sql情况

                   (1)相应的SQL实现

SELECT
	id,
	customer_id,
	repayment_state,
	final_settle_date
FROM
	wf_cr_borrow_order
WHERE
	param8 = 1
AND apply_time < NOW()
AND id > 0
AND repayment_state IN (2, 5)
AND NOW() BETWEEN date_add(
	final_settle_date,
	INTERVAL 7 DAY
)
AND date_add(
	final_settle_date,
	INTERVAL 15 DAY
)
ORDER BY
	id
LIMIT 1000;

                   (2)执行情况:

                           只需执行两次,每次执行1.5秒,总共执行3秒;

              4、优化前后对比:

                    优化执行总时长为1.7小时,优化后执行3秒,效率提升2040倍;

【总结】

        SQL性能优化是每个程序员必备的技能,掌握这些技巧然后根据业务灵活运用;       

        想要留住客户,用户体验是很重要的一块儿,性能的体验是用户体验的一个重要的部分。    

 

你可能感兴趣的:(●,Data,Base,#,【MySQL】)