一、性能优化
转载博客: https://www.cnblogs.com/zhouyusheng/p/8038224.html
- 为查询缓存优化你的查询
- EXPLAIN 你的 SELECT 查询:使用 EXPLAIN 关键字可以让你知道MySQL是如何处理你的SQL语句的。这可以帮你分析你的查询语句或是表结构的性能瓶颈。
- 为搜索字段建索引
- 在Join表的时候使用相当类型的例,并将其索引
- 千万不要 ORDER BY RAND();使用 limit [随机数] 1;
- 永远为每张表设置一个ID
- 使用 ENUM 而不是 VARCHAR
- PROCEDURE ANALYSE() 取得建议
- 尽可能的使用 NOT NULL:null也要占用空间
- Prepared Statements :Prepared Statements很像存储过程,是一种运行在后台的SQL语句集合,我们可以从使用 prepared statements 获得很多好处,无论是性能问题还是安全问题。
- 把IP地址存成 UNSIGNED INT
- 拆分大的 DELETE 或 INSERT 语句:执行delete和insert会锁住表-》delete ··· LIMIT 1000
- 越小的列会越快
- 选择正确的存储引擎
二、查询语句优化
- 当只要一条数据时候使用 LIMIT 1
- 避免 SELECT * 需要什么数据获取什么数据
- 分页查询优化 (测试500万数据量的查询时间)
limit 分页查询优化: limit m,n 扫描符合条件的 m+n行,再去掉前m行
1、[SQL]SELECT * FROM t_record r where r.record_id >= 5000000 ORDER BY r.record_id LIMIT 50;
受影响的行: 0
时间: 0.639s
2、[SQL]
SELECT * FROM t_record r ORDER BY r.record_id LIMIT 5000000,50;
受影响的行: 0
时间: 8.322s
3、[SQL]
SELECT r.record_id FROM t_record r ORDER BY r.record_id LIMIT 5000000,1;
受影响的行: 0
时间: 2.805s
4、[SQL]
SELECT * FROM t_record r where r.record_id >= (SELECT r.record_id FROM t_record r ORDER BY r.record_id LIMIT 5000000,1) LIMIT 50;
受影响的行: 0
时间: 2.984s
1、使用情况:主键id是连续;
2、最原始的limit分页方式,查询速度最慢;
3、对比[查询2]查询结果数据量越大速度越慢;
4、非连续ID查询方法
总结:分页查询时记录前一页的最后一条数据;