MySQL百万级数据量查询优化

先说下背景,之前写代码基本不用考虑数据库优化,当然,一些基本的mysql优化专业素养还是有的,直到公司业务流水太大,做数据统计的时候请求超时-_-

我才意识到,作为一名优秀的程序媛,数据优化是必不可少,能用上就千万别偷懒..

对查询进行优化,要尽量避免全表扫描

1. 基础优化,入门优化

> a.少用*


 把select *改成具体要筛选的字段,哪怕是全部字段
 把count(*)改成count(id)等对主键或索引的统计


> b.少用联表查询


 数据量不大的表联查不太明显,蛋当表里数据达到十万百万,那么你联表查询的数据量很有可能达到千万级数据量

2. 常用优化技能

建立索引

说到索引要先熟悉两个mysql查询分析器

explain sql语句
desc sql语句

其次我们熟悉查询分析结果中的type: 表示表的连接类型,性能由好到差的连接类型为下面顺序

system: 表中只有一行,即常量表,是const联接类型的一个特例
const: 单表中最多有一个匹配行,如primary key或unique index
eq_ref: 对于前面的每一行,在此表中只查询一条记录,也就是多表连接中使用primary key或unique index
ref: 与eq_ref类似,区别在于不是使用primary key或unique index,而是使用普通索引
ref_or_null: 与ref类型,区别在于条件中包含对null的查询
index_merge: 索引合并优化
unique_subquery: in的后面是一个查询主键字段的子查询
index_subquery: 与unique_subquery类似,区别在于in的后面是查询非唯一索引字段的子查询  www.2cto.com  
range: 单表中的范围查询
index: 对于前面的每一行,都通过查询索引来得到数据
all: 对于前面的每一行,都通过扫描全表来得到数据

那么在什么情况下我们需要加索引呢?

3. 深入优化
比较偏门,易漏的优化方式
将from_

(未完)

你可能感兴趣的:(随笔)