mysql数据库分享点滴

今天元云大师 给我们做了数据库分享,感觉很有用呀,这里作了分享笔记,供大家参考

 

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 或者是 gentalage ,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字段的话,在创建列的时候如果在字段旁边设置这样的类型的话

生成的是会加上on update CURRENT_TIMESTAMP这个,
在更新表的任何一个字段的时候都会更新这一列为当前系统最新时间

你可能感兴趣的:(sql,mysql,cache)