mysql 性能优化

来源:互联网 发布:淘宝促销模板代码 编辑:程序博客网 时间:2024/05/01 09:14
一:   主要可以通过5种方法  1:query_cache_size   2开启二进制日志    3  开启慢查询日志   4: table_cache    5: key_buffer_size

    前面三种 我们已经讨论过了 ,现在看看后面的两种 :

   table_cache 指定表的高速缓存的大小,当mysql访问一个表的时候,如果在表缓冲区中还有空间,该表就被打开并放入其中,这样可以更快地访问表内容。通过检查峰值时间的状态值Open_tables和Opened_tables,可以决定是否需要增加table_cache的值。如果你发现open_tables等于table_cache,并且opened_tables在不断增长,那么你就需要增加table_cache的值了(上述状态值可以使用SHOW STATUS LIKE ‘Open%tables’获得)。注意,不能盲目地把table_cache设置成很大的值。如果设置得太高,可能会造成文件描述符不足,从而造成性能不稳定或者连接失败。

open_tables 表示当前打开的表缓存数,如果执行flush tables操作,则此系统会关闭一些当前没有使用的表缓存而使得此状态值减小;

opend_tables 表示曾经打开的表缓存数,会一直进行累加,如果执行flush tables操作,值不会减小。
在mysql默认安装情况下,table_cache的值在2G内存以下的机器中的值默认时256到512,如果机器有4G内存,则默认这个值是2048,但这决意味着机器内存越大,这个值应该越大,因为table_cache加大后,使得mysql对SQL响应的速度更快了,不可避免的会产生更多的死锁(dead lock),这样反而使得数据库整个一套操作慢了下来,严重影响性能。所以平时维护中还是要根据库的实际情况去作出判断,找到最适合你维护的库的table_cache值。
 
 在谈谈key_buffer_size
    key_buffer_size 这个参数是用来设置索引块(index blocks)缓存的大小,它被所有线程共享,严格说是它决定了数据库索引处理的速度,尤其是索引读的速度。那我们怎么才能知道key_buffer_size 的设置是否合理呢,一般可以检查状态值Key_read_requests和Key_reads,比例key_reads / key_read_requests应该尽可能的低,比如1:100,1:1000 ,1:10000。
Variable_name    Value
Key_read_requests     20948
Key_reads     69
  key_reads / key_read_requests=69: 20948≈1:300
  所以比较大,性能状况欠佳


二  :尽量把 left join  转为join

三 :explain的使用
     返回结果:
      Id: SELECT识别符
     select_type: SELECT类型
     Table:输出的行所引用的表
     Type:联接类型
     possible_keys:指出MySQL能使用哪个索引在该表中找到行
     Key:显示MySQL实际决定使用的键(索引)
     key_len:显示MySQL决定使用的键长度
     Ref:显示使用哪个列或常数与key一起从表中选择行
     Rows:显示MySQL认为它执行查询时必须检查的行数
      Extra:该列包含MySQL解决查询的详细信息

四 :添加索引:
       添加索引的原则
      1   较频繁的作为查询条件的字段应该添加索引
      2   唯一性太差的字段不应该添加索引
      3  更新太频繁的字段不适合创建索引
      4  不会出现在where子句中的字段不应该创建索引