今天元云大师 给我们做了数据库分享,感觉很有用呀,这里作了分享笔记,供大家参考
Mysql 性能分析关键命令:
Set profiling = no
Show profiles
Select sql_no_cache
Show profile all for query n
在执行查询过程中 sending data步骤中有以下开销
1. 服务器数据发送到客户端
2. 磁盘发送内存中
3. 查找数据
数据库查询策略:
两张大表做查询的,如何做查询优化?
例如有:消息表 需要inner join 用户关系表
需要先将用户关系表查询出id,然后再和消息表做inner join
原则左表小右表大查询效率比较高的
关键词记录:
Context_voluntary 上下文切换 这个值当然越小越好啦
如何加快对某几个属性的查询速度?
例如:select user_id from user where user_name=’aaaa’
为user_name 创建 索引
Select user_name from user where age =12 and gental = 1
这个查询就要为user表创建一个 age ,gental, user_name 这三个属性的联合索引,注意:索引顺序必须是 age ,gental ,user_name 或者是 gental,age ,user_name 反正user_name应该在最后面
注意,在查询条件上查询的参数的顺序可以打乱
如何做分页查询优化?
执行 select * from user limit n,m
在表的偏移量n大的时候 这个查询是比较慢的,因为数据库在执行sql语句的时候会把 便宜量之前的数据全部搜寻出来,然后在传给客户端的时候将之前的数据丢弃掉。
优化的思路是使用“覆盖索引”
先执行 select id from user limit 10000,10005;
然后将查询出来的结果集合 和user表 inner join一下。
例如现在有server表估计有2000w行数据,要在这么大的数据集中分页查询数据,可以这样查询:
select a.* from ( select sid from server where 1=1 limit 10000,10005) bb inner join server a on a.sid = bb.sid
数据库表中有一列如果是timestamp字段的话,在创建列的时候如果在字段旁边设置这样的类型的话