[转]如何优化 MySQL
* 如果索引正在工作,Handler_read_key的值将很高,这个值代表了一个行被索引读的次数,很低的值代表通过增加索引提升的性能不高,因为索引并不经常使用。
* 对于Handler_read_rnd_next 的高值意味着查询运行的低效,且建立索引被认为是一种补救。这个值表示按照顺序读下一行的申请次数。
* have_query_cache = YES 表明这台服务器默认已经配置进行查询高速缓冲。
* query_cache_size 表示的是高速缓存的大小。
* query_cache_type 0/OFF表示缓存已经关闭。1 意味着缓存已经打开了。如果为2/DEMAND则 需要按照需要添加 SQL_CACHE来启用高速缓存。
* 可以使用 explain select_sql 来查看本次查询使用了索引。
* key_buffer_size 保存了索引可以使用的缓存的大小。一般保存在内存总量的25%-30%。
* table_cache 变量控制表高速缓存可以使用的内存的数量,以及在同一时刻mysql可以处理表的数量。Mysql手册建议可以使用 table_cache = max_connections * N 设置table_cache, 其中N为标准连接中表的数量。
* 可以提高使用group by /order by 语句查询的速度,通过增加mysql分类缓存的值的分类结果设置,通过sort_buffer变量进行控制,还可以考虑增加read_rnd_buffer_size变量的值,以提高度分类行的速度。
* 增大read_buffer_size 可以提高 select 的速度。
* 如果有批量插入数据,可以通过增大 bulk_insert_buffer_size 提高速度。
* 对于比较长的或者复杂的作用应该通过binlog_cache_size 变量增加高速缓存的规模,来得到更好的性能。
* 如果预计在服务器上会增加很多新的连接,增加thread_cache_size 变量值的做法很好。